次のような要件ファイルがたくさんあるとします。
requirements.txt # common for both 2.x and 3.x
requirements-2.txt # 2.x
requirements-3.txt # 3.x
現在のPythonインタープリターのバージョンに基づいて、ファイルにinstall_requires
引数を入力したいと思います。もちろん、 pipがインストール プロセスを処理するsetup.py
と仮定します。
解決策 1:もちろん、正しい要件を読み取って返す単純な関数を作成できます。複数のプロジェクトの場合、関数をどこにでもコピーする必要があるため、これは明らかに受け入れられません。
解決策 2:ここでの次のアイデアは、私のためにそれを行う単純なパッケージを作成することですが、問題は、配布時 (のようにpython setup.py sdist
) だけでなく、さらに重要なことに、マシンへのインストール時にも利用できる必要があることです。
私はそれを行う単純なモジュールを書くことができました.それを呼び出しましょうdepmodule
. 私も以下を持っていましたsetup.py
:
# -*- coding: utf-8 -*-
from setuptools import setup, find_packages
try:
from depmodule import find_requirements
except ImportError:
# this line is executed when reading setup.py for the first time
# since depmodule is not installed yet
find_requirements = lambda: []
setup(
name='some-package',
packages=find_packages(),
# snip...
platforms='any',
# note that depmodule is listed here as a requirement, so it will be
# installed before some-package, thus will be available when it comes
# to running setup.py of some-package
install_requires=['depmodule'] + find_requirements(),
)
それに関しては、pip install some-package
実際には依存関係を正しく解決しますが、それらは pip によって取得されないため、インストールするだけです: depmodule some-package
(その順序で) の代わりにdepmodule dep1 dep2 ... some-package
.
引数を使用しようとしましsetup_requires
たが、運がありませんでした。依存関係はダウンロードされましたが、egg パッケージ (展開されていない) であるため、アクセスできませんでした。
この問題を克服する方法はありますか? これに役立つ代替手段 (他のアプローチ) はありますか?
ありがとう!