Установить модуль на сайт-пакеты с помощью setuptools - PullRequest
0 голосов
/ 12 июня 2019

Я пытаюсь загрузить CLI в PIP, который после установки будет работать, когда пользователь наберет myscript

Моя структура папок выглядит следующим образом:

lib
  myscript
    __init__.py (empty)
    __main__.py (code that needs to run)
    utilities.py (needs to be imported from main)

scripts
  myscript

setup.py

Мой setup.py должен установить пакет lib.myscript и установить myscript в качестве модуля командной строки

setup.py

import setuptools
setuptools.setup(
    name='myscript',
    version='1.0',
    scripts=['./scripts/myscript'],
    packages=['lib.myscript'],
    install_requires=['setuptools', 'pandas >= 0.22.0', 'numpy >= 1.16.0'],
    python_requires='>=3.5'
)

scripts/myscript

#!/usr/bin/env bash

if [[ ! $@ ]]; then
    python -m myscript -h
else
    python -m myscript $@
fi

Как только я сделаю python setup.py install, myscript устанавливается как модуль командной строки и запускается. Тем не менее он выдает ошибку о том, что нет модуля с именем myscript.

1 Ответ

0 голосов
/ 12 июня 2019

Вы не установили myscript, вы установили lib.myscript, поэтому попробуйте это: python -m lib.myscript.А чтобы Python распознал lib как пакет, создайте пустой файл lib/__init__.py.

PS.Этот код:

#!/usr/bin/env bash

if [[ ! $@ ]]; then
    python -m myscript -h
else
    python -m myscript $@
fi

может быть упрощен как:

#!/usr/bin/env bash
exec python -m myscript ${@:--h}

, что в переводе с оболочки означает "Использовать $@, если не пусто, иначе -h"

...