問題タブ [python-poetry]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
5605 参照

django - Python 依存関係の複数のバージョンのテストをサポートするために、tox と詩を連携させるにはどうすればよいですか?

現在、違いを確認するためのテストとして使用pipenvしているプロジェクトを切り替えています。poetryこのプロジェクトは、シンプルで再配布可能な Django アプリです。Python 3.6-8、Django 2.2 および 3.0 をサポートしています。tox.iniしたがって、Python と Django のすべての組み合わせをカバーするファイルがあります。

私が抱えている問題(これはpipenv世界には存在しません)は、poetry installステートメントが常にdepsセクションにあるものをpoetry.lockファイルにあるもので上書きすることです(存在しない場合は自動生成されます)。これは、各 tox virtualenv がデフォルトで Django 3.0 をインストールするため、テスト マトリックスが Django 2.2 に対してテストしないことを意味します。

これがどのように機能するのかわかりません-インストールpoetry先の既存の環境を尊重して依存関係をインストールする必要がありますか?

では、私の質問は、依存関係マネージャーとして詩を使用して、マルチバージョンの tox (または travis) テスト マトリックスをどのように設定すればよいかということです。

pyproject.tomlは Python / Django のバージョンを次のように定義しています:

生成されたpoetry.lockファイル (コミットされていない) には、次の Django バージョン情報が含まれています。


更新: きれいな tox 出力を含めます

これは、ロック ファイルを削除し、tox 環境を再作成した結果です。ご覧のとおり、tox はDjango==2.2virtualenv の依存関係としてインストールされますが、インストール時にpoetryこれを更新3.0します。

既存のパッケージのインストールを考慮して、詩のインストールを実行するソリューションが必要です。つまり、pyproject.toml状態Django = "^2.2 || ^3.0"で、2.2 が既にインストールされている場合は、そのバージョンに固定します。アップグレードを試みないでください。

更新 2

以下のシノロックの指示に従います - tox ファイルを更新して、削除skip_distして含めるようにしisolated_buildました。これはうまくいきます。pytesttox はパッケージをビルドしてインストールしますが、含まれていない非開発バージョンとcoverage、後で含めたい多くの linting ツールのみです。つまり、tox を介して実行したいツールは、詩の dev-dependencies として指定されています。これらすべてをtoxファイルに含めるという解決策があります-しかし、それは自滅的なようです-私は詩とtoxの両方が依存関係を宣言しているためです。


更新 3: 解決策