【问题标题】:Python CLI application does not run when installed from PyPI, runs fine when installed locallyPython CLI 应用程序在从 PyPI 安装时不运行,在本地安装时运行良好
【发布时间】:2019-03-12 13:55:22
【问题描述】:

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

【问题讨论】:

  • 这不是一个完整的错误回溯——您遗漏了实际的错误消息。
  • 哎呀!已编辑。

标签: python installation pip pypi


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-06
    • 1970-01-01
    • 2022-11-11
    • 1970-01-01
    • 1970-01-01
    • 2020-09-13
    相关资源
    最近更新 更多