1

B と C (たまたま git サブモジュールにある) にソース (「編集」) 依存関係があるプロジェクト A があります。次のような要件ファイルがあります。

[requirements.txt]
nose
-e B/src
-e C/src

私の setup.py には、これらのパッケージが deps としてリストされています。

[setup.py]
install_requires=[nose, B, C]

しかし、ホイールを別のクライアント プロジェクト X にインストールすると、これらの「ソース」依存関係が見つかりません (A のホイールの一部ではありません)。

Collecting B (from A==0.0.1)
Could not find a version that satisfies the requirement B (from A==0.0.1) (from versions: )
No matching distribution found for B (from A==0.0.1)

サブプロジェクトごとに個別のバイナリ配布を作成する必要がありますか?

4

1 に答える 1

4

BandCinstall_requiresリストに追加しないでください。これは、チーズ ショップ (つまり pypi) 経由で公開されたパッケージ用です。リストの下に置く必要がBあります。Cpackages

の依存関係はinstall_requires、Python リリース (バイナリかどうか) をビルドするときにバンドルされませんが、パッケージはpackagesリリースにバンドルされることに注意してください (スタンドアロン ライブラリではなく、単に「モジュール」と見なすことができます)。

これを説明すると、ホイールを作成し、それを私に渡してインストールしようとするとnose、チーズショーからパッケージが取得されてインストールされます。Bまた、Cこの方法でインストールしようとしますが、それらをビルドして pypi サーバーにリリースしていないため、失敗します。

したがって、実際には2つの選択肢があります。最初の 1 つは、それぞれをビルドBしてC個別に pypi サーバー (または独自の pypi サーバー) にリリースすることです。もう 1 つのオプションは、ファイルにBCをパッケージとして含めることです。setup.pyこのようにして、メイン プロジェクトをビルドすると、Bとの両方Cがリリースに含まれます (つまり、この場合は wheel ファイル)。

ローカルの依存関係を個別に構築し、それらを pypi サーバーにアップロードすることを選択した場合、セットアップは機能するはずです。それ以外のオプションを選択した場合は、ローカルの依存関係をパッケージ リストに移動する必要があります。このような場合に作成する setup.py のサンプルを次に示します。

from setuptools import setup

setup(
    name='myproject',
    version='1.0.0',
    author='myself',
    author_email='myself@mywebsite.com',
    install_requires=['nose'],
    packages==['B', 'C']
    package_dir={'A': 'path/to/A/directory', 'B': 'path/to/B/dir'}
) 
于 2015-10-08T19:52:48.717 に答える