Приложение Python CLI не запускается при установке из PyPI, работает нормально при локальной установке - PullRequest
0 голосов
/ 08 октября 2018

Скажем, я работаю над приложением командной строки с именем 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 .

... он работает нормально. IЯ могу запустить его из любого места, используя команду 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, с его именем ничего не конфликтует.

1 Ответ

0 голосов
/ 08 октября 2018

Если вы хотите установить модуль 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()
    …
)
...