Подтвердить что ты не робот

Как написать 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 (из анализа)

Что я делаю неправильно?

4b9b3361

Ответ 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,
)