1

私が管理しているパッケージ内のsetup.pyファイルは、別のパッケージのコードを使用して拡張機能を構築します。

from setuptools import setup, find_packages
from mydependence import build_ext
...
setup(
    name='mypackage',
    version='1.0.0',
    ...
    setup_requires = [
      'mydependence', # is this being checked properly?
    ],
    ...
    install_requires = [
      'mydependence',
    ],
    ...
    )

現在のパッケージを でビルドしたいzc.buildoutので、次のような単純なbuildout.cfgファイルを作成します。

[buildout]
parts = python
eggs = mypackage

[python]
recipe = zc.recipe.egg
interpreter = python
eggs = ${buildout:eggs}

残念ながら、それは期待どおりに機能しません-実行./bin/buildoutして読み取ったときに、見つからないsetup.pyと文句を言います。mydependencebuildout が mysetup.pyを実行するときsys.path、ディレクトリの下にインストールされたパッケージについての知識はありませんeggs(それ自体を除くsetuptools!)。どうやら、「eggs」および「develop-eggs」./bin/buildoutのパッケージは、パッケージのsetup.py.

質問:それを機能させる方法は?

4

1 に答える 1

2

mydependence基本的な問題は、メソッドを呼び出す前に既にインポートしていることですsetup()。どの setuptools (またはビルドアウト) があなたが得るものを無視できるかはわかりませImportErrorん。

たとえば、http://pythonhosted.org/py2app/examples.htmlのサンプル コードを見ると、次のようなコードが表示されます。

from setuptools import setup
setup(
    app=["MyApplication.py"],
    setup_requires=["py2app"],
)

のインポートがないことに注意してくださいpy2app。どうやらsetup_requires、基本的な setuptools 機能に「拡張機能」をロードする方法です。基本的な python インポート エラーを回避する方法ではありません。

更新: https://stackoverflow.com/a/12061891/27401に解決策がある @MartijnPieters による以下のコメントを参照してください。

あなたの場合、Martijnの例は次のようになります。

import setuptools

setuptools.dist.Distribution(dict(setup_requires='mydependence'))
# `setup_requires` is parsed and acted upon immediately; 
# from here on out the package `mydependence` is installed
# and importable.

from mydependence import build_ext

setup(
    ...
    install_requires = [
      'mydependence',
    ],
    ....
    )
于 2013-02-13T21:53:44.083 に答える