15

setuptools/distutils を使用して Python で C ライブラリをビルドする場合

$ python setup.py build

*.so/*.pydファイルは (または同等のもの) に配置されますbuild/lib.win32-2.7

これらのファイルをテスト スイートでテストしたいのですが、build/lib*パスをハードコーディングしたくありません。distutils からこのパスをプルする方法を知っている人sys.path.append(build_path)はいますか?または、これらのファイルを取得するためのさらに良い方法はありますか? (最初にインストールしていない場合)

4

4 に答える 4

16

実行しているプラ​​ットフォームと実行している python のバージョンを取得してから、自分で名前を組み立てる必要があります。

現在のプラットフォームを取得するには、 を使用しますsysconfig.get_platform()。Python のバージョンを取得するには、sys.version_info(具体的には、返されたタプルの最初の 3 つの要素) を使用します。私のシステム(Python 2.7.2を搭載した64ビットLinux)では、次のようになります。

>>> import sysconfig
>>> import sys
>>> sysconfig.get_platform()
linux-x86_64
>>> sys.version_info[:3]
(2, 7, 2)

lib ディレクトリの形式は「lib.platform-versionmajor.versionminor」です (つまり、2.7.2 ではなく 2.7 のみ)。Python の文字列フォーマット メソッドを使用して、この文字列を作成できます。

def distutils_dir_name(dname):
    """Returns the name of a distutils build directory"""
    f = "{dirname}.{platform}-{version[0]}.{version[1]}"
    return f.format(dirname=dname,
                    platform=sysconfig.get_platform(),
                    version=sys.version_info)

これを使用して、任意の distutils ビルド ディレクトリの名前を生成できます。

>>> import os
>>> os.path.join('build', distutils_dir_name('lib'))
build/lib.linux-x86_64-2.7
于 2013-01-16T23:47:35.873 に答える