这是我的项目结构。
[~/Sandbox/pystructure]:$ tree
.
├── pystructure
│ ├── __init__.py
│ ├── pystructure.py
│ └── utils
│ ├── eggs
│ │ ├── base.py
│ │ └── __init__.py
│ ├── __init__.py
│ └── spam.py
├── README.md
└── requirements.txt
3 directories, 8 files
这些是文件的内容,
[~/Sandbox/pystructure]:$ cat pystructure/utils/spam.py
def do():
print('hello world (from spam)!')
[~/Sandbox/pystructure]:$ cat pystructure/utils/eggs/base.py
def do():
print('hello world (from eggs)!')
[~/Sandbox/pystructure]:$ cat pystructure/utils/eggs/__init__.py
from .base import do
[~/Sandbox/pystructure]:$ cat pystructure/pystructure.py
#!/usr/bin/python3
from .utils import spam, eggs
def main():
spam.do()
eggs.do()
if __name__ == '__main__':
main()
但是,当我尝试像这样运行应用程序时,出现此错误,
[~/Sandbox/pystructure]:$ python3 pystructure/pystructure.py
Traceback (most recent call last):
File "pystructure/pystructure.py", line 3, in <module>
from .utils import spam, eggs
ModuleNotFoundError: No module named '__main__.utils'; '__main__' is not a package
或者当我尝试从创建文件的目录中运行代码时(这不是我的愿望,因为我想将它作为服务或使用 cron 运行),
[~/Sandbox/pystructure]:$ cd pystructure/
[~/Sandbox/pystructure/pystructure]:$ python3 pystructure.py
Traceback (most recent call last):
File "pystructure.py", line 3, in <module>
from .utils import spam, eggs
ModuleNotFoundError: No module named '__main__.utils'; '__main__' is not a package
但是,如果我导入它,它确实可以工作(但是只能从基本目录中...)
[~/Sandbox/pystructure/pystructure]:$ cd ..
[~/Sandbox/pystructure]:$ python3
Python 3.6.7 (default, Oct 22 2018, 11:32:17)
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from pystructure import pystructure
>>> pystructure.main()
hello world (from spam)!
hello world (from eggs)!
>>>
我相信我的问题来自没有完全理解PYTHONPATH,我尝试谷歌搜索,但我还没有找到我的答案......请提供任何见解。
炎炎设计
相关分类