从PyPI安装时,Python CLI应用程序无法运行,在本地安装时,可以正常运行

时间:2018-10-07 21:23:52

标签: python installation pip pypi

说我正在开发一个名为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;它的名称没有任何冲突。

1 个答案:

答案 0 :(得分:0)

如果要从文件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()
    …
)