Ant*_*shy 12 python pip setuptools command-line-tool pypi
我有一个名为 Rackfocus 的 CLI 工具。我已经发布到 PyPI,并且我有理由确定它之前工作得很好。当我尝试在 Mac 上使用当前版本的 Python 运行它时,出现错误:
No module named rackfocus.__main__; 'rackfocus' is a package
and cannot be directly executed
Run Code Online (Sandbox Code Playgroud)
我想要的只是一个带有一个入口点的包,用户可以使用 pip 下载和使用该包。
根据教程,我在setup.py中有这个:
packages=['rackfocus']
entry_points = {
'console_scripts': [
'rackfocus=rackfocus.run:main'
]
}
Run Code Online (Sandbox Code Playgroud)
我有一个rackfocus.run:main函数、一个init .py 等等。怎么了?
您可以在本地重现此内容:
pip3 install -e .python3 -m rackfocusentry_points = {
'console_scripts': [
'rackfocus=rackfocus.run:main'
]
}
Run Code Online (Sandbox Code Playgroud)
这告诉打包系统创建一个名为 的包装器可执行文件rackfocus。该可执行文件将自动处理启动 Python 所需的所有步骤,run在rackfocus包中找到模块,找到其main函数并调用它。
您运行可执行文件rackfocus(如果您使用的是虚拟环境,它应该已经在路径上),而不是python -m rackfocus.
使用python -m rackfocus与此完全无关(它甚至与打包没有任何关系,并且可以轻松地与尚未安装的代码一起使用)。它不使用包装器;相反,它只是尝试执行该rackfocus模块。但就你而言,rackfocus 不是一个模块;这是一个包裹。错误消息的含义与它所说的完全一样。
您可能想要python -m rackfocus.run执行该run模块 - 但当然,这实际上仍然没有调用main()(就像它不会调用一样python rackfocus/main.py- 尽管该-m方法更强大;特别是,它允许您的相对导入工作)。
错误消息显示,rackfocus.__main__因为您可以通过给包提供一个__main__module来使其可运行。
| 归档时间: |
|
| 查看次数: |
19667 次 |
| 最近记录: |