我有一个a包含多个版本的项目,main#.py因此我将它们组织到一个名为run. 我通常a通过./a调用来运行项目python run/main1.py。因为main1.py涉及到顶级包之外的导入,我需要sys.path.insert(0, "./")在main1.py.
现在我创建b了main1.py从a. 从b\main.py,我如何才能专门main1.py导入a/utils.py?
要求:
Project
a是我很久以前从事的一个项目,所以我想对其标题进行有限的更改。我想像现在这样python run/main1.py工作。我可能会在不同的计算机之间移动项目,因此
main1.py需要utils.py相对于自身导入。(即不使用绝对路径导入)我希望解决方案具有可扩展性。
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