Python 从 PyPI 安装时,CLI 应用程序不 运行,在本地安装时 运行 没问题

Python CLI application does not run when installed from PyPI, runs fine when installed locally

假设我正在开发一个名为 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 命令从任何地方 运行 它。

但是当我按照these instructions将它上传到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.py 安装模块 example,您 需要将其作为 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()
    …
)