【发布时间】:2020-09-14 22:08:56
【问题描述】:
我正准备部署一个具有以下布局的 Python 包:
MyPackage/
setup.py
MyPackage/
__init__.py
__main__.py
lib/
__init__.py
utils.py
db/
__init__.py
db1.py
db2.py
tasks/
__init__.py
something.py
setup.py 包含:
setup(name = MyPackage,
...
packages = find_packages(),
include_package_data = True,
entry_points = {"console_scripts" : [
"do_something = MyPackage.__main__:main"
]})
__main__.py 包含:
import tasks.something as something
something.my_function()
something 模块包含:
import db.db1 as db1
import db.db2 as db2
def my_function():
db1.this_func(...)
db2.that_func(...)
db1 包含:
import sqlalchemy
import lib.utils as utils
def this_func(...):
sqlalchemy.create_engine(...)
而db2 包含:
import sqlalchemy
import lib.utils as utils
def that_func(...):
sqlalchemy.create_engine(...)
通过从已安装的site-packages 目录执行运行时,__main__.py 将毫无问题地完成。如果我在交互式会话中执行import MyPackage.tasks.something as something,模块也会导入问题。但是,当我运行console_scripts 脚本do_something 时,我收到ModuleNotFound 的tasks 错误。
是什么导致我的控制台脚本无法找到子包?
提前致谢!
【问题讨论】:
-
可能是错误的导入;请将
__main__.py的内容添加到问题中。 -
您调用的命令到底是什么,生成的完整错误消息是什么?您用于打包和安装项目的命令是什么?您提到了一个控制台脚本入口点
do_something = MyPackage.__main__:main,但在MyPackage/__main__.py文件中似乎没有任何main可调用(函数)。
标签: python python-3.x setuptools python-packaging