带有入口点控制台脚本的Python包分发 [英] Python package distribution with entry_point console_script
本文介绍了带有入口点控制台脚本的Python包分发的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在准备部署具有以下布局的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
错误。
是什么原因导致我的控制台脚本找不到子包?
提前谢谢!
推荐答案
按照以下示例更改导入:
__main__.py:
import tasks.something as something
# to:
import MyPackage.tasks.something as something
# or
from .tasks import something as something
这篇关于带有入口点控制台脚本的Python包分发的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文