我正在对 Python 包创建进行 PoC。我已按照链接中提到的步骤进行操作。
请在下面找到示例项目结构
demopackage
|--__init__.py
|--config
| |--__init__.py
| |--dumyconfig.py
|--processor
| |--__init__.py
| |--dbprocessor
| | |--__init__.py
| | |--db.py
| |--fileprocessor
| | |--__init__.py
| | |--csv.py
|--validation
| |--__init__.py
| |--dumyvalidation.py
|--util
| |--__init__.py
| |--dumyutil.py
|--main.py
|
setup.py
当我在本地运行时,代码按预期工作。但是,在创建包 tar.gz 文件并将其安装在另一个位置后,我收到所有内部模块的 ModuleNotFound/ImportError,即使它们在 site-pacakge 文件夹中可用。
有人可以帮忙解决这个问题吗?
main.py
目前使用
from demopackage import config
安装代码后,会在搜索路径 (
demopackage
) 的目录中找到 sys.path
。不过,在安装代码之前,python main.py
会将 demopackage
本身添加到搜索路径中,您的脚本无法找到名为 demopackage
的包,只能找到目录 ../demopackage
中的模块。
一个快速修复方法是将
..
添加到您的搜索路径:
PYTHONPATH=.. python main.py
但是,我建议不要将
main.py
(脚本)存储在包中。将您的布局更改为类似的
demopackage
|--__init__.py
|--config
| |--__init__.py
| |--dumyconfig.py
|--processor
| |--__init__.py
| |--dbprocessor
| | |--__init__.py
| | |--db.py
| |--fileprocessor
| | |--__init__.py
| | |--csv.py
|--validation
| |--__init__.py
| |--dumyvalidation.py
|--util
|--__init__.py
|--dumyutil.py
setup.py
main.py
这样,当您执行 demopackage
时,
python main.py
is就会隐式添加到您的路径中。