我是python的新手并试图弄清楚如何以“正确的方式”做事并遇到以下问题:
我的项目结构看起来有点像:
├─packageA
│ functions.py
│ __init__.py
│
└─tests
some_tests.py
packageA/__init__.py
为空。
packageA/functions.py
看起来像这样:
def some_function(x):
return x*x
最后,tests/some_tests.py
:
import packageA.functions
if __name__ == '__main__':
print(packageA.functions.some_function(2))
如果我使用pycharm运行test.py,它可以正常工作。但是,当我打开一个控制台并通过运行python.exe ./tests/some_tests.py
来启动它时,我得到了
Traceback (most recent call last):
File ".\tests\some_tests.py", line 1, in <module>
import packageA.functions
ModuleNotFoundError: No module named 'packageA'
在写这篇文章时,我发现pycharm将源文件夹添加到PYTHONPATH - 当我关闭它时,我得到了同样的错误。上面的文件夹结构是构建python项目的明智方法吗?如果没有,应该如何组织呢?
答案 0 :(得分:1)
有几种选择。但是,similar SO question中接受的答案并不理想。
below answer通过在sys.path
列表的开头显式添加父目录路径来解决您的问题。
import os, sys, inspect
currentdir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))
parentdir = os.path.dirname(currentdir)
sys.path.insert(0, parentdir)
import packageA.functions