Страницы

Поиск по вопросам

среда, 19 декабря 2018 г.

Как запускать файл Python из любого места в Ubuntu?

Привет. Читаю книгу A Byte of Python. Там на 32й странице http://wombat.org.ua/AByteOfPython/AByteofPythonRussian-2.01.pdf создается своя команда helloworld и с помощью нее можно вызывать файл helloworld.py из любого места. К примеру просто py/helloworld.py у меня получается запускать, а вот как сделать свою команду не пойму. Знаю есть alies, но в книге как-то иначе делается. Кто подскажет как повторить пример? И чем отличается от alies?


Ответ

Как запускать файл Python из любого места в Ubuntu?
Также как и любую другую программу:
файл должен быть в одной из директорий, указанной в $PATH
$ echo $PATH файл должен быть исполняемым
$ chmod +x путь/к/helloworld.py файл должен содержать корректную shebang строку на самом верху, например:
#!/usr/bin/env python3
Если ~/bin директория находится в $PATH, то можно symlink создать:
$ ln -s /полный/путь/к/helloworld.py ~/bin/helloworld
После этого можно запускать helloworld из любой директории:
$ helloworld

В качестве альтернативы, чтобы автоматически создать исполняемый файл в пути из helloworld.py можно использовать setup.py файл:
from setuptools import setup
setup( name='helloworld', version='0.1', py_modules=['helloworld'], entry_points=''' [console_scripts] helloworld=helloworld:main ''', )
Код для запуска следует в main() функцию поместить.
Чтобы инсталлировать скрипт (из директории с setup.py):
$ python -m pip install .
Если вы не используете virtualenv, тогда можно добавить --user опцию, чтобы локально для текущего пользователя поставить:
$ python -m pip install . --user
нужно добавить ~/.local/bin в путь ($PATH переменная окружения) в этом случае.
После этого можно запускать helloworld из любой директории:
$ helloworld

А в чем отличие этого подхода от alies?
Проще сказать что общее: alias (псевдоним) также как и другие подходы позволяет, набирая строку, например: helloworld, запустить желаемую команду. alias — это функциональность оболочки (такой как bash). Как symlink так и явная установка с помощью setup.py, приведённые в ответе, не требуют оболочку, чтобы потом запускать команду, например, можно из Питона запустить rc = subprocess.call('helloworld')

Комментариев нет:

Отправить комментарий