Как я могу заставить setuptools установить пакет из другого источника, который также доступен на pypi с тем же номером версии?
Это аналогичный вопрос Как я могу заставить setuptools установить пакет, который не находится в PyPI?, но не тот же.
Как я хотел бы использовать разветвленную версию некоторого пакета, setuptools игнорируют ссылку зависимости (так как она имеет тот же номер версии).
Есть ли способ принудительно использовать ссылку из dependency_links? Или это единственный способ изменить номер версии в forked repo?
requires = [
...
'pyScss==1.1.3'
...
dependencies = [
'https://github.com/nadavshatz/pyScss/zipball/master#egg=pyScss-1.1.3'
]
Обновление
Странно, видимо, он работает, если этот пакет является единственным в списке, который еще не установлен. Если есть другой недостающий пакет, он загрузит его из pypi.
Ответы
Ответ 1
Я считаю, что вы можете просто использовать dependency_links
, как описано в этом вопросе:
from setuptools import setup
setup(name = 'mypkg',
version = '0.0.1',
description = 'Foo',
author = 'bar',
author_email = '[email protected]',
install_requires = ['pyScss==1.1.3'],
dependency_links = [
'https://github.com/nadavshatz/pyScss/zipball/master#egg=pyScss-1.1.3'
]
)
Протестировано с помощью python setup.py develop
Вы, вероятно, захотите переименовать яйцо, чтобы подчеркнуть его fork http://www.python.org/dev/peps/pep-0386/
За пределами setup.py вы можете принудительно использовать это локально, используя requirements.txt
и pip
. Хотя это не сделает ваш пакет зависеть от вилки, вы можете легко документировать его как способ установки.
$ cat requirements.txt
https://github.com/nadavshatz/pyScss/zipball/master#egg=pyScss-1.1.3
$ pip install -r requirements.txt
Ответ 2
В итоге я сделал что-то очень похожее на ответ в fooobar.com/info/53157/....
Мне нужен пакет requests-file
github, который конфликтует с конфликтом с другим пакетом requests-file
в PyPi. Оба они имеют версию 1.0, а версия PyPi имеет несколько более высоких версий.
Обходной путь в моем ias_tools/setup.py
выглядит следующим образом:
setup(
...
install_requires=[
'requests-file<=99.99',
],
dependency_links=[
'https://github.com/jvantuyl/requests-file/archive/b0a7b34af6e287e07a96bc7e89bac3bc855323ae.zip#egg=requests-file-99.99'
]
)
В моем случае я использую pip
, поэтому мне также пришлось использовать --process-dependency-links
:
% pip install --process-dependency-links ./ias_tools
You are using pip version 6.0.6, however version 6.1.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
Processing ./ias_tools
DEPRECATION: Dependency Links processing has been deprecated and will be removed in a future release.
Collecting requests-file<=99.99 (from ias-tools==0.1)
Downloading https://github.com/jvantuyl/requests-file/archive/b0a7b34af6e287e07a96bc7e89bac3bc855323ae.zip
Requirement already satisfied (use --upgrade to upgrade): requests>=1.1.0 in ./venv/lib/python2.7/site-packages (from requests-file<=99.99->ias-tools==0.1)
Installing collected packages: ias-tools, requests-file
Running setup.py install for ias-tools
Running setup.py install for requests-file
Successfully installed ias-tools-0.1 requests-file-1.0
Я не слишком беспокоюсь об уведомлении об устаревании, так как запрос на перенос был отправлен в pip для обесценения устаревания (после обсуждение об этом).