2

リモートサーバーにdistutilsパッケージをインストールする必要があるビルドアウトスクリプトに取り組んでいます。

PyPi には、これを実行するための 2 つのレシピ ( collective.recipe.distutils 0.1 と zerokspot.recipe.distutils 0.1.1 )があります。

後者のモジュールは前者の派生物であり、最初のモジュールよりも少し便利ですが、どちらも同じ問題に悩まされています。これについては次に説明します。

bootstrap.py が実行されると、zc.buildout パッケージがダウンロードされ、buildout の Egg ディレクトリに配置されます。これにより、./bin/buildout が zc.buildout コードにアクセスできるようになりますが、/usr/local/python はこの時点で zc.buildout について何も知りません。

ビルドアウトは、サブプロセス内で「python setup.py install」を実行してパッケージをインストールしようとします。/usr/local/python に zc.buildout がインストールされていないため、これにより ImportError が生成されます。

だから、私はいくつかの解決策を持っています。

  1. リモート サーバーで easy_install を使用して zc.buildout をインストールします。このオプションはまったく好きではありません。非常に重要でないモジュールの特殊なケースになります。

  2. zerokspot.recipe.distutils を変更して、このように「import zc.buildout」の周りに try ブロックを配置すると、zc.buildout がインストールされていなくてもインストールされます。これは問題のない解決策ですが、ややハックです。

  3. subprocess を、distutils api または setuptools api を使用してパッケージをインストールするコードに置き換えます。これが私の意見では最善の解決策です。

問題は、#3 をどのように行うかです。

ありがとう、タラス

PS: zc.buildout に依存しない別のパッケージを作成することで問題を解決しました。私のパッケージはtaras.recipe.distutilsと呼ばれ、pypi で入手できます。

4

3 に答える 3

1

zerokspot.recipe.distutilsは、次のように、setup.pyにzc.buildoutへの依存関係を追加するという点で根本的に壊れています。

  1. setup.pyget_versionからのインポートzerokspot.recipe.distutils
  2. すべてがzerokspot.recipe.distutilsそので定義されています__init__.pyget_version
  3. __init__.pyzerokspot.recipe.distutils輸入品zc.buildout

著者が定義する理由はget_version私には謎です。ベストプラクティスは、setup.pyそれ自体に単純なバージョン文字列を保持し、setuptoolsが(を介してsetup.cfg)開発バージョンを処理できるようにし、バージョンメタデータ抽出のためにdistutilsを使用できるようにします。

一般に、パッケージ全体をインポートすることはお勧めできませんsetup.py。インストール時にすべてのパッケージ依存関係が存在する必要があるためです。明らかに、パッケージの作成者はzc.buildoutをサイト全体のパッケージとしてインストールしており、彼の見落としに気づいていませんでした。

最善の策は、githubでパッケージをフォークし、get_versionの依存関係を削除し、代わりにフォークを使用しながら元の作成者に変更を提案することです。

于 2009-09-14T08:40:23.887 に答える
1

subprocessモジュールを使用して、Python プログラム内でコマンド ライン プログラムを呼び出すことができます。

import subprocess
subprocess.call('python setup.py install')

ただし、このインストールが実行される環境をどの程度制御できますか? 配布しているパッケージの場合、人々がどのような解決策を提案しても、問題が発生する可能性があります。root アクセスが必要な場合 (例: sudo python setup.py install) をどのように処理しますか?

何らかの方法で setuptools の拡張である API を提供するため、Paverを検討することを検討してください。

于 2009-09-14T04:12:12.027 に答える
0

本当に bdistを生成したくありませんか?

于 2009-09-14T02:45:42.153 に答える