Как создать CLI в Python, который можно установить с помощью PIP? - PullRequest
1 голос
/ 11 июня 2019

Как видно из названия, я пытаюсь сделать скрипт на Python доступным из командной строки.Я обнаружил библиотеки, такие как click и argv , которые облегчают доступ к аргументам, передаваемым из командной строки, но пользователю все равно приходится запускать скрипт через Python.

Вместо

python /location/to/myscript.py

Я хочу иметь возможность просто

myscript

из любого каталога

Из того, что я понимаю, я могудобиться этого на моем компьютере, редактируя мои переменные PATH.Тем не менее, я хотел бы иметь возможность просто:

pip install myscript

и затем получить доступ к сценарию, набрав myscript из любого места.Есть ли какой-нибудь специальный код, который я бы добавил в setup.py?

Ответы [ 2 ]

2 голосов
/ 11 июня 2019

Вы можете сделать это с setuptools

примером хорошего setup.py (скажем, ваш пакет требует панд и numpy):

import setuptools
setuptools.setup(
    name='myscript',
    version='1.0',
    scripts=['./scripts/myscript'],
    author='Me',
    description='This runs my script which is great.',
    packages=['lib.myscript']
    install_requires=[
        'setuptools',
        'pandas >= 0.22.0',
        'numpy >= 1.16.0'
    ],
    python_requires='>=3.5'
)

Ваш каталог должен быть настроен какследует:

[dkennetz package]$ ls
lib scripts setup.py

внутри lib будет:

[dkennetz package]$ ls lib
myscript

внутри myscript будет:

[dkennetz package]$ ls lib/myscript
__main__.py
__init__.py
helper_module1.py
helper_module2.py

main будет использоваться для вызова вашей функциии делайте все, что вы хотите.

внутри скриптов будет:

[dkennetz package]$ ls scripts
myscript

, а содержимое myscript будет:

#!/usr/bin/env bash

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

, затем запуститьвы делаете: python setup.py install

, который установит вашу программу и все зависимости, которые вы включили в install_requires=[] в вашем файле setup.py, и установите myscript в качестве модуля командной строки:

[dkennetz ~]$ myscript
0 голосов
/ 11 июня 2019

Предполагая, что вы находитесь в оболочке bash и Python 3 установлен, и вы хотите иметь возможность делать то, что вы запрашиваете, вам нужно будет добавить путь к файлу сценария в переменную PATH в файле .bash_profile вваш домашний каталог.Кроме того, в файле скрипта Python в первой строке скрипта должно быть что-то похожее на следующее:

#!/usr/bin/env python3

Кроме того, вы можете удалить расширение (.py) из файла скрипта,такой, что, как в моем примере выше, имя файла является сценарием в отличие от script.py.

Вам также нужно будет установить разрешение вашего имени файла на

chmod 755 filename

Если вы хотите, чтобы скрипт был доступен для всей системы, вам нужно изменить / etc / profile и добавить в конец файла:

export PATH=$PATH:/path/to/script

В качестве альтернативы, если вы перемещаете питонфайл сценария для /usr/local/bin, возможно, нет необходимости вносить какие-либо изменения в профиль, поскольку этот каталог часто уже находится в PATH.

Чтобы увидеть значение PATH, введите следующую команду в оболочке

echo $PATH
...