7

Python 2 と 3 の両方をサポートする必要がある setup.py があります。

コードは現在動作しており、Python 2.x にインストール可能です。

use_2to3 = Trueこの句を setup.pyに追加すると、モジュールを Python 3 にインストールできますが、次のようにします。

python setup.py test

テストの 1 つが StringIO クラスを使用し、インポート行が Python 3 で失敗するため、失敗が発生します (現在from StringIO import StringIO、Python3 ではあるべきところが です)。from io import StringIO

use_2to3 キーワードを追加すると、すべてのテスト (単体テストを含む) がテストされる前に 2to3 によって処理されると思いました。

私は何が欠けていますか?それが役立つ場合、setup.py の大部分は次のようになります。

from setuptools import setup

setup(
    name='myproject',
    version='1.0',
    description='My Cool project',
    classifiers = [
        'Programming Language :: Python',
        'Programming Language :: Python :: 3',
    ],

    py_modules=['mymodule'],
    test_suite='test_mymodule',
    zip_safe=False,
    use_2to3 = True,
)

編集:2to3が実行されていないように感じる理由python setup.py testは、それが爆発し、スタックトレースの下部に次のように表示されるためです。

File "/home/aparkin/temp/mymodule/test_mymodule.py", line 18, in <module>
    from StringIO import StringIO

しかし、test_mymodule.py で 2to3 を実行した場合、そのインポート行は次のように書き直されているはずです。

from io import StringIO

そして (最悪の場合) テストは個別に失敗するはずです。

4

1 に答える 1

1

配布がモジュールを取得して 2to3 経由で実行するには、py_modules にリストされている必要があります。それを次のように変更します。

py_modules=['mymodule', 'test_mymodule'],

残念ながら、これには、プロジェクトをインストールするときに test_mymodule をインストールするという副作用があり、おそらく望ましくありません。このような場合、通常、プロジェクトを mymodule.tests サブパッケージを含むパッケージに変換します。このようにして、混乱を招くことなく、テストを「インストール可能」にすることができます。

于 2012-06-18T15:20:58.023 に答える