Как написать setup.py, чтобы включить репозиторий git в качестве зависимости
Я пытаюсь написать setup.py для моего пакета. Мой пакет должен указывать зависимость от другого репозитория git.
Это то, что у меня есть до сих пор:
from setuptools import setup, find_packages
setup(
name='abc',
packages=find_packages(),
url='https://github.abc.com/abc/myabc',
description='This is a description for abc',
long_description=open('README.md').read(),
install_requires=[
"requests==2.7.0",
"SomePrivateLib>=0.1.0",
],
dependency_links = [
"git+git://github.abc.com/abc/SomePrivateLib.git#egg=SomePrivateLib",
],
include_package_data=True,
)
Когда я запускаю:
pip install -e https://github.abc.com/abc/myabc.git#egg=analyse
Я получаю
Не удалось найти версию, удовлетворяющую требованию SomePrivateLib >= 0.1.0 (из анализа) (из версий:)
Некоторое распределение найдено для SomePrivateLib >= 0.1.0 (из анализа)
Что я делаю неправильно?
Ответы
Ответ 1
Вы можете найти правильный способ сделать это здесь.
dependency_links=['http://github.com/user/repo/tarball/master#egg=package-1.0']
Ключом является не предоставление ссылки на репозиторий git, а ссылка на архив. Github создает для вас основную ветку, если вы добавите /tarball/master
, как показано выше.
Ответ 2
Прочитав пункт 3939, связанный с @muon в комментариях выше, а затем спецификацию PEP-508, я обнаружил, что мой личный репозиторий можно установить с помощью setup.py
с помощью setup.py
, используя этот образец спецификации в install_requires
(не более dependency_links
):
install_requires = [
'some-pkg @ git+ssh://[email protected]/someorgname/[email protected]#egg=some-pkg',
]
@v1.1
указывает тег выпуска, созданный на github и может быть заменен тегом ветвления, фиксации или другим типом.
Ответ 3
К сожалению, другой ответ не работает с частными репозиториями, что является одним из наиболее распространенных вариантов использования для этого. В конце концов я получил его работать с файлом setup.py
, который выглядит следующим образом:
from setuptools import setup, find_packages
setup(
name = 'MyProject',
version = '0.1.0',
url = '',
description = '',
packages = find_packages(),
install_requires = [
# Github Private Repository - needs entry in 'dependency_links'
'ExampleRepo'
],
dependency_links=[
# Make sure to include the '#egg' portion so the 'install_requires' recognizes the package
'git+ssh://[email protected]/example_organization/ExampleRepo.git#egg=ExampleRepo-0.1'
]
)
Ответ 4
Более общий ответ, чтобы получить информацию из файла Requeriment.txt, который я делаю:
from setuptools import setup, find_packages
from os import path
loc = path.abspath(path.dirname(__file__))
with open(loc + '/requirements.txt') as f:
requirements = f.read().splitlines()
required = []
dependency_links = []
# do not add to required lines pointing to git repositories
EGG_MARK = '#egg='
for line in requirements:
if line.startswith('-e git:') or line.startswith('-e git+') or \
line.startswith('git:') or line.startswith('git+'):
if EGG_MARK in line:
package_name = line[line.find(EGG_MARK) + len(EGG_MARK):]
required.append(package_name)
dependency_links.append(line)
else:
print('Dependency to a git repository should have the format:')
print('git+ssh://[email protected]/xxxxx/xxxxxx#egg=package_name')
else:
required.append(line)
setup(
name='myproject', # Required
version='0.0.1', # Required
description='Description here....', # Required
packages=find_packages(), # Required
install_requires=required,
dependency_links=dependency_links,
)