我有一些脚本(app.py
和app2.py
),我希望它们可以由父目录中的main.py
运行,也可以直接运行。
项目结构:
main.py
package
├── __init__.py
├── app.py
├── helper.py
package2
├── __init__.py
├── app2.py
├── helper.py
main.py
from package import app
from package2 import app2
package / app.py
from .helper import greeting
greeting()
package / helper.py
def greeting():
print('hello')
package2 / app2.py
from .helper import greeting
greeting()
package2 / helper.py
def greeting():
print('hello in package 2')
当我运行main.py
时,它会打印
hello
hello in package 2
是正确的,但是我不能直接运行package/app.py
,它将抛出错误attempted relative import with no known parent package
我在stackoverflow中发现的一种解决方案是将main.py
中的代码更改为:
import sys
sys.path.insert(0,'package')
sys.path.insert(0,'package2')
from package import app
from package2 import app2
然后删除app.py
和app2.py
中的点。现在我可以直接使用它们,但是新问题是当我运行main.py
时,它已打印
hello in package 2
hello in package 2
这是错误的。
另一种解决方案是将app.py
和app2.py
赞为:
if __name__ == "__main__":
from helper import greeting
else:
from .helper import greeting
greeting()
它解决了我所有的问题,我只是想知道这是正确的方法吗?