Я создаю setup.py
файл для проекта, который зависит от частных репозиториев GitHub. Соответствующие части файла выглядят так:
from setuptools import setup
setup(name='my_project',
...,
install_requires=[
'public_package',
'other_public_package',
'private_repo_1',
'private_repo_2',
],
dependency_links=[
'https://github.com/my_account/private_repo_1/master/tarball/',
'https://github.com/my_account/private_repo_2/master/tarball/',
],
...,
)
Я использую setuptools
вместо того , distutils
потому что последнее не поддерживают install_requires
и dependency_links
аргументы за этот ответ.
Вышеупомянутый установочный файл не может получить доступ к частным репозиториям с ошибкой 404 - чего и следовало ожидать, поскольку GitHub возвращает 404 на неавторизованные запросы для частного репозитория. Однако я не могу понять, как сделать setuptools
аутентификацию.
Вот несколько вещей, которые я пробовал:
Используйте
git+ssh://
вместоhttps://
in,dependency_links
как если бы я устанавливал репо сpip
. Это не удается, потому что setuptools не распознает этот протокол («неизвестный тип URL: git + ssh»), хотя в документации по распространению указано, что это необходимо. То жеgit+https
иgit+http
.https://<username>:<password>@github.com/...
- до сих пор получить 404. (Этот метод не работает сcurl
илиwget
из командной строки либо - хотяcurl -u <username> <repo_url> -O <output_file_name>
делает работу.)Обновление setuptools (0.9.7) и virtualenv (1.10) до последних версий. Также попытался установить дистрибутив, хотя в этом обзоре говорится, что он был снова объединен с setuptools. В любом случае, никаких кубиков.
В настоящее время я только что setup.py
распечатал предупреждение о том, что частные репозитории необходимо загружать отдельно. Это явно далеко не идеально. Я чувствую, что мне не хватает чего-то очевидного, но не могу представить, что это могло быть. :)
Дубликат иш вопрос, без ответа здесь .
источник
Ответы:
Я пытался заставить это работать для установки с помощью pip, но вышеуказанное не сработало для меня. Из [1] я понял, что
PEP508
следует использовать стандарт, из [2] я получил пример, который действительно работает (по крайней мере, для моего случая).Пожалуйста, обратите внимание; это с
pip 20.0.2
наPython 3.7.4
setup( name='<package>', ... install_requires=[ '<normal_dependency>', # Private repository '<dependency_name> @ git+ssh://git@github.com/<user>/<repo_name>@<branch>', # Public repository '<dependency_name> @ git+https://github.com/<user>/<repo_name>@<branch>', ], )
После указания моего пакета установка работает нормально (также с
-e
настройками и без необходимости указывать--process-dependency-links
).Ссылки [1] https://github.com/pypa/pip/issues/4187 [2] https://github.com/pypa/pip/issues/5566
источник
#egg=...
часть кажется ненужной.#egg
и другоеbranch
необязательно (см. Править), и это тоже работаетgit+https
.ssh://
и бегитеCould not resolve hostname
изменить ,:
чтобы/
в вашем клоне ссылке. У меня была эта ошибка с gitlab.Reading https://pypi.org/simple/some-fake-name/
а затемCouldn't find index page for 'some_fake_name' (maybe misspelled?)
. В конце концов, последняя отображаемая ошибкаerror: Could not find suitable distribution for Requirement.parse('some_fake_name@ git+ssh://git@github.com/cglacet/quadtree.git')
Вот что у меня сработало:
install_requires=[ 'private_package_name==1.1', ], dependency_links=[ 'git+ssh://git@github.com/username/private_repo.git#egg=private_package_name-1.1', ]
Обратите внимание, что в названии яйца должен быть номер версии, иначе он скажет, что не может найти пакет.
источник
pip install --process-dependency-links ...
--process-dpendency-links
устарел, см. мой ответ с использованием спецификации URL-адреса PEP508Я не смог найти никакой хорошей документации по этому поводу, но нашел решение в основном методом проб и ошибок. Кроме того, установка из pip и setuptools имеет некоторые тонкие различия; но этот способ должен работать для обоих.
GitHub (в настоящее время, по состоянию на август 2016 года) не предлагает простой способ получить zip / tarball с частными репозиториями. Итак, вам нужно указать setuptools, чтобы сообщить setuptools, что вы указываете на репозиторий git:
from setuptools import setup import os # get deploy key from https://help.github.com/articles/git-automation-with-oauth-tokens/ github_token = os.environ['GITHUB_TOKEN'] setup( # ... install_requires='package', dependency_links = [ 'git+https://{github_token}@github.com/user/{package}.git/@{version}#egg={package}-0' .format(github_token=github_token, package=package, version=master) ]
Пара замечаний здесь:
0
) в конце линии, даже если нет пакета на PyPI. Это должно быть настоящее число, а не слово.git+
указать в начале, чтобы указать setuptools, что он клонирует репо, а не указывает на zip / tarball.version
может быть веткой, тегом или хешем фиксации--process-dependency-links
при установке из pipисточник
v
гитхабе к тегу добавлен тег . Поэтому мне нужно было использоватьv1.1.0
вместо этого1.1.0
в моем скрипте setup.py.Я нашел (хакерский) обходной путь:
#!/usr/bin/env python from setuptools import setup import os os.system('pip install git+https://github-private.corp.com/user/repo.git@master') setup( name='original-name' , ... , install_requires=['repo'] )
Я понимаю, что есть этические проблемы с использованием системного вызова в сценарии установки, но я не могу придумать другого способа сделать это.
источник
import pip
. Ни ответ @ vadimg, ни это предложение в pypa / pip не сработали.python setup.py --version
.Через ответ Тома Хеммеса я обнаружил, что это единственное, что сработало для меня:
install_requires=[ '<package> @ https://github.com/<username>/<package>/archive/<branch_name>.zip']
источник
Использование URL-адреса архива из github работает для меня для общедоступных репозиториев. Например
dependency_links = [ 'https://github.com/username/reponame/archive/master.zip#egg=eggname-version', ]
источник
eggname-version
?Изменить: похоже, это работает только с общедоступными репозиториями github, см. Комментарии.
dependency_links=[ 'https://github.com/my_account/private_repo_1/tarball/master#egg=private_repo_1', 'https://github.com/my_account/private_repo_2/tarball/master#egg=private_repo_2', ],
Вышеупомянутый синтаксис, кажется, работает для меня с setuptools 1.0. На данный момент, по крайней мере, синтаксис добавления "# egg = project_name-version" к зависимостям VCS задокументирован в ссылке, которую вы дали для распространения документации .
источник
Это работа для нашего сценария:
https://github.com/pypa/pip/issues/3610#issuecomment-356687173
источник