Используйте setuptools для установки из местоположения

У меня есть фреймворк для сайта, который я хочу использовать в нескольких проектах, но я не хочу отправлять свой фреймворк в PyPi. Могу ли я в любом случае указать своему setup.py установить фреймворк из определенного места?

Вот мой текущий setup.py

from setuptools import setup

setup(
    name='Website',
    version='0.2.1',
    install_requires=[
        'boto>=2.6',
        'fabric>=1.4',
        'lepl>=5.1',
        'pygeoip>=0.2.4',
        'pylibmc>=1.2.3',
        'pymongo>=2.2',
        'pyyaml>=3.1',
        'requests>=0.12',
        'slimit>=0.7.4',
        'thrift>=0.8.0',
        'tornado>=2.3',
    ],
)

Эти зависимости на самом деле являются всеми зависимостями для моего фреймворка, поэтому, если бы я мог каким-то образом включить его, я мог бы иметь только фреймворк, указанный здесь.


person tbeauvais    schedule 13.11.2012    source источник


Ответы (1)


Похоже, что все ваши требования общедоступны (на PyPI), и вам не нужны их конкретные версии, достаточно «достаточно новые». В 2016 году, когда вы можете рассчитывать на то, что у всех будет последняя версия pip, делать действительно нечего. Если вы просто pip install . из исходного каталога или pip install git+https://url/to/package или что-то подобное, он просто вытащит последние версии зависимостей из сети. Тот факт, что вашего пакета нет в PyPI, не помешает pip найти там свои зависимости.

Или, если вы хотите хранить их все локально, вы можете настроить локальный индекс PyPI. Хотя в таком случае, вероятно, было бы проще отправить ваш пакет в тот же локальный индекс и установить его оттуда.

Если вам нужно что-то более сложное, файл требований может позаботиться об этом. это для вас.

В частности, если вам нужно распространить пакет среди других людей в вашей организации, у которых может не быть настроен локальный индекс вашей группы, или по какой-то причине вы не можете настроить локальный индекс в первую очередь, вы можете поместить все необходимая информация в файле требований или, если это более уместно, в командной строке, используемой для установки вашего пакета (что даже работает, если вы застряли с easy_install или древними версиями pip).

Подробная информация содержится в документации, и в этой записи в блоге это очень хорошо объясняется, но короткая версия такова:

  • Если у вас есть локальный индекс PyPI, укажите --extra-index-url=http://my.server/path/to/my/pypi/.

  • Если у вас есть HTTP-сервер, на который вы можете сбрасывать пакеты, и вы можете включить на своем сервере опцию «автоматического индексирования содержимого каталога», просто укажите --find-links=http://my.server/path/to/my/packages/.

  • Если вы хотите использовать локальные файлы (или совместное использование файлов SMB/AFP/и т. д.), создайте простой HTML-файл, содержащий только ссылки на все локальные пакеты, и укажите --find-links=file:///path/to/my/index.html.

Опять же, они могут идти в командной строке «чтобы установить этот пакет, запустите это» (или скрипт установки curl | sh), но обычно вы просто хотите поместить их в файл требований. Если это так, обязательно используйте только одно значение для каждой опции (например, если вы хотите добавить два дополнительных индекса, добавьте два параметра --extra-index-url) и поместите каждое из них на отдельной строке.

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

person abarnert    schedule 13.11.2012
comment
@Tommy Ну, вопросу и ответу 3-1 / 2 года. Если вы хотите найти обновленные ссылки и отредактировать ответ, пожалуйста, сделайте это. Если вы считаете, что весь ответ настолько устарел, что его следует переписать (я бы даже не упомянул easy_install, если бы отвечал сегодня ..:), вы можете написать новый. (Я не думаю, что ОП вернется, потому что кто-то другой может найти его с помощью поиска, как вы, вероятно, сделали, и если ваш ответ им полезен, это здорово. - person abarnert; 05.02.2016
comment
обновленная ссылка: pip.readthedocs.org/en/stable/ ссылка/pip_install/ - person Tommy; 05.02.2016
comment
@Tommy Теперь, когда я думаю об этом, я не уверен, что вопрос больше актуален. Теперь, когда вы можете рассчитывать на то, что у всех есть pip 5+, pip install . или pip install git+url/to/package должен просто работать с установочным файлом OP и будет лучше, чем установка файл требований, а затем выполнить установку python setup.py для этого пакета. Так что, вероятно, лучше написать новый ответ или кардинально отредактировать этот... - person abarnert; 05.02.2016
comment
Нет, этот ответ по-прежнему актуален. Если вы работаете в большой компании, в которой размещен внутренний сервер pypi, но хотите, чтобы люди могли установить ваш пакет, который включает в себя deps, размещенные на этом сервере, без необходимости знать, что сервер существует, вы можете просто указать extra-index-urls в требованиях к вашему пакету. .txt-файл. Также обратите внимание, что не все размещено на git. - person Tommy; 05.02.2016
comment
@Tommy Конечно, но pip также знает, как находить вещи по hg, URL-адресу zip-файла или большинством других способов размещения пакета. Если это не так, вам нужно скачать, разархивировать и pip install . вместо этого. В любом случае, я отредактировал ответ, по-прежнему сосредоточившись на случае с ОП, но, надеюсь, охватив все альтернативы и больше не устарел. Это определенно не идеально, поэтому, если у вас есть какие-либо предложения, я хотел бы их услышать. - person abarnert; 05.02.2016
comment
ваше редактирование о локальном индексе PyPi по-прежнему упускает из виду ключевой момент, который я упомянул. Многие крупные компании размещают один или несколько внутренних репозиториев PyPi. Ваш пакет может иметь зависимости от этих серверов. Однако, если появится другой пользователь и захочет установить ваш пакет, возможно, размещенный на сайте управления исходным кодом компании, вы не хотите, чтобы он знал, где лежат все ваши зависимости. Вот почему --extra-index-url в файле requirements.txt так полезен. Все пользователи вашей программы могут передавать ваш пакет без необходимости знать эти подробности. - person Tommy; 05.02.2016
comment
@ Томми, честно говоря, я никогда не работал в такой организации. Когда я использовал локальный индекс, у всех был этот локальный индекс. Итак, я могу попытаться отредактировать его, чтобы справиться с вашим случаем, но я могу ошибиться. Дай мне попробовать... - person abarnert; 05.02.2016