假设我正在开发一个名为 Example 的命令行应用程序,它的调用命令是example
. 我写了一个看起来像这样的 setup.py:
import setuptools
setuptools.setup(
name='example',
version='1.0',
entry_points = {
'console_scripts': [
'example=example.run:main'
]
},
...
)
该文件与被调用的模块位于同一级别example
(包括它__init__.py
和所有。run.py
里面有一个,带有一个main
函数。
当我将这个正在进行的项目安装为符号链接时,使用...
pip3 install -e .
...它工作正常。我可以使用该example
命令从任何地方运行它。
但是当我按照这些说明将其上传到 PyPI 时,然后使用...
pip3 install example
... 它说...
Traceback (most recent call last):
File "/usr/local/bin/example", line 7, in <module>
from example.run import main
ModuleNotFoundError: No module named 'example'
当然,该项目实际上并没有被调用example
;与它的名字没有任何冲突。
如果example
要从文件安装模块,则example.py
需要将其作为 Python 模块添加到setup.py
:
setuptools.setup(
…
py_modules=['example'],
…
)
如果example
是目录中的包,则example/
需要将其添加为包:
setuptools.setup(
…
packages=['example'],
…
)
如果子目录中example
有子包,则example/*/
需要列出所有子包:
setuptools.setup(
…
packages=['example', 'example.sub1', 'example.sub2'],
…
)
您可以setuptools
列出您的所有子包:
setuptools.setup(
…
packages=setuptools.find_packages()
…
)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句