web-dev-qa-db-ja.com

依存関係としてgitリポジトリを含めるためにsetup.pyを書く方法

パッケージ用に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(analyseから)の要件を満たすバージョンが見つかりませんでした(バージョンから:)SomePrivateLib> = 0.1.0(analyseから)に一致する分布が見つかりませんでした

私は何を間違えていますか?

53
abc

正しい方法を見つけることができます こちら

dependency_links=['http://github.com/user/repo/tarball/master#Egg=package-1.0']

重要なのは、gitリポジトリへのリンクではなく、tarballへのリンクを提供することです。上記のように/tarball/masterを追加すると、Githubはmasterブランチのtarballを作成します。

36
cel

pip issue 3939 上記のコメントで@muonによってリンクされ、さ​​らに PEP-508仕様 を掘り下げた後、setup.pyinstall_requiresでこの仕様パターンを使用(これ以上dependency_links):

install_requires = [
  'some-pkg @ git+ssh://[email protected]/someorgname/[email protected]#Egg=some-pkg',
]

@v1.1は、githubで作成されたリリースタグを示し、ブランチ、コミット、または異なるタイプのタグに置き換えることができます。

30
Dick Fox

残念ながら、他の回答はプライベートリポジトリでは機能しません。これは、最も一般的な使用例の1つです。最終的には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'
    ]

)
7
tedivm

私が行うrequirements.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,
) 
1
Gonzalo Odiard