我有一个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