1

我有一个a包含多个版本的项目,main#.py因此我将它们组织到一个名为run. 我通常a通过./a调用来运行项目python run/main1.py。因为main1.py涉及到顶级包之外的导入,我需要sys.path.insert(0, "./")main1.py.

现在我创建bmain1.pya. 从b\main.py,我如何才能专门main1.py导入a/utils.py

要求:

  1. Projecta是我很久以前从事的一个项目,所以我想对其标题进行有限的更改。我想像现在这样python run/main1.py工作。

  2. 我可能会在不同的计算机之间移动项目,因此main1.py需要utils.py相对于自身导入。(即不使用绝对路径导入)

  3. 我希望解决方案具有可扩展性。b将需要从其他几个项目中导入模块,例如a. 我觉得扩展系统的 PATH 变量可能只会把事情搞砸。有没有更简洁的解决方案?

我的项目文件如下:

  • 一个
      • main1.py
    • 实用程序.py
  • b
    • 主文件
    • 实用程序.py

a/run/main1.py

import sys
sys.path.insert(0, "./")
from utils import hello    # Anyway to specify this to be ../utils.py ?
hello()

a/utils.py

def hello():
    print('hello from a')

b/main.py

import sys
sys.path.append("../")
from a.run import main1

import utils
utils.hello()

b/utils.py

def hello():
    print('hello from b')

这是目前的结果。我想第一行打印'hello from a':

>>> python run/main1.py:
hello from a
>>> cd ../b
>>> python run/main.py:
hello from b           (we want this to be "hello from a")
hello from b
4

0 回答 0