2015-01-03 3 views
0

У меня есть программа командной строки python среднего размера, которая отлично работает из моего исходного кода, и я создал исходный файл дистрибутива и установил его в виртуальную среду, используя «настройку python. py install "Как запустить скрипт python, установленный из distutils

Поскольку это чистая программа Python и при условии, что конечные пользователи установили Python и требуемые пакеты, моя идея в том, что я могу распространять ее через PyPi для всех доступных платформ в качестве исходного дистрибутива.

После установки, я получаю «APPNAME» каталог в virtualenv sitepackages каталога, и он также работает правильно, когда я пишу «питон„pathtovirtualenv“/ Lib/sitepackages /„“myappname

Но это как конечный пользователь должен запускать распределенные программы из дистрибутивов из командной строки.

У меня есть информация о том, как распространять программу, используя distutils, но не о том, как конечный пользователь должен запускать ее после Установка

ответ

0

Поскольку вы уже создали setup.py, я бы рекомендовал d глядя на entry_points:

entry_points={ 
     'console_scripts': [ 
      'scriptname=yourpackage.module:function', 
     ], 
    }, 

Здесь у вас есть пакет с именем yourpackage и модуль с именем module в нем, и вы обратитесь к функции function. Эта функция будет завершена скриптом под названием scriptname, который будет установлен в папке bin пользователей, которая обычно находится в $PATH, поэтому пользователь может просто ввести scriptname после того, как он установил ваш пакет через pip install.

Резюмируя: пользователь установит пакет через pip install yourpackage и, наконец, быть в состоянии назвать function в module через script name.

Вот некоторые документы по этой теме:

https://pythonhosted.org/setuptools/setuptools.html#automatic-script-creation http://www.scotttorborg.com/python-packaging/command-line-scripts.html

+0

Забыл упомянуть, что я разрабатываю Windows, и вам нужно протестировать на окнах. У Windows нет стандартного места для размещения приложений в командной строке (должно быть?). Я предполагаю, что описанный выше подход будет работать на linux и osx. – user29809

+0

так должно быть script=myapp.__main__.py:main? – user29809

+0

Должно работать нормально. Прочитайте некоторые темы по этому вопросу, у меня нет каких-либо проблем с Windows (и я не собираюсь это менять;) – tamasgal

0

Ну, я в конце концов понял.

Первоначально я хотел просто использовать distutils, мне нравится, когда конечный пользователь может установить его с минимальными дополнительными зависимостями. Но теперь я обнаружил, что setuptools - лучший вариант в моем случае.

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

trunk 
    |-- appname 
    |  |-- __init__.py # an empty file 
    |  |-- __main__.py # calls appname.main() 
    |  |-- appname.py # contains a main() and imports moduleN 
    |  |-- module1.py 
    |  |-- module2.py 
    |  |-- ... 
    |-- docs 
    |  |-- README 
    |  |-- LICENSE 
    |  |-- ... 
    |-- setup.py 

И мой setyp.py в основном выглядит следующим образом:

# This setup file is to be used with setuptools source distribution 
# Run "python setup sdist to deploy 

from setuptools import setup, find_packages 

setup(name = "appname", 
     ... 
     include_package_data = True, 
     packages = find_packages(), 
     zip_safe = True, 
     entry_points = { 
      'console_scripts' : 'appname=appname.appname:main' 
     } 
    ) 

Следующим шагом является выяснить, как установить содержимое каталог документов на компьютере пользователя.

Но сейчас я собираюсь добавить параметры -readme, -license, --changes, --sample (и т. Д.) В основной скрипт, чтобы отображать их во время выполнения.

Смежные вопросы