Как записать setup.py для включения мерзавца repo как зависимость

Я пытаюсь записать setup.py для своего пакета. Мой пакет должен указать зависимость от другого мерзавца repo.

Это - то, что я имею до сих пор:

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 (от анализируют),

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

57
задан 21 September 2015 в 09:30

3 ответа

После рытья через выпуск 3939 зернышка, связанный @muon в комментариях выше и затем спецификация PEP-508, я нашел успех, заставив мою частную repo зависимость установить через setup.py использование этого шаблона спецификации в install_requires (больше никакой dependency_links):

install_requires = [
  'some-pkg @ git+ssh://git@github.com/someorgname/pkg-repo-name@v1.1#egg=some-pkg',
]

Эти @v1.1 указывает на тег версии, созданный на GitHub, и мог быть заменен ответвлением, фиксацией или другим типом тега.

45
ответ дан 1 November 2019 в 16:44

К сожалению, другой ответ не работает с частными репозиториями, который является одним из случаев наиболее популярного способа использования для этого. Я в конечном счете получал его работающий с 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://git@github.com/example_organization/ExampleRepo.git#egg=ExampleRepo-0.1'
    ]
)

Более новые версии зернышка делают это еще легче путем устранения необходимости использовать "dependency_links" -

from setuptools import setup, find_packages

setup(
    name = 'MyProject',
    version = '0.1.0',
    url = '',
    description = '',
    packages = find_packages(),
    install_requires = [
        # Github Private Repository
        'ExampleRepo @ git+ssh://git@github.com/example_organization/ExampleRepo.git#egg=ExampleRepo-0.1'
    ]
)
7
ответ дан 1 November 2019 в 16:44

Более общий ответ, для получения информации из файла requeriments.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://git@github.com/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,
) 
1
ответ дан 1 November 2019 в 16:44

Другие вопросы по тегам:

Похожие вопросы: