4

わかりました、C モジュールを含むビルド済みの Python パッケージを作成したいと思います。つまり、最後に、モジュールを使用するために必要なすべてを含み、pipでインストールできるtarballが必要です。つまり、最後に次のことができます。

pip install whatevertarballgetsproduced.tar.gz

mylibrary が利用可能になります。また、仮想環境に適している必要があります。

私の現在のディレクトリ構造は次のとおりです。

project/
    + setup.py
    + mylibrary/
        + __init__.py
        + mylibrary.py
        + _mylibrary.so
    + README

つまり、コンパイルされた C ライブラリは_mylibrary.so. このファイルの派生元である C ソースは、tarball に含まれません。OSX(Lion)でもこれを行っています。mylibrary.pyC ライブラリ コードへの Python ラッパーが含まれているだけです。

どうすればこれを達成できますか? 私はやろうと思いましたpython setup.py bdistが、これは本当に私が望むものではありません (それによって生成された tarball が pip でインストールできないものを見逃していない限り)。

完了するために、私の setup.py は次のようになります。

from setuptools import setup

setup(
    name='mylibrary_py3mac',
    version='0.1.1',
    description='My library which is tied to OSX & Python 3',
    long_description=open('README').read(),
    packages=['mylibrary'],
    classifiers = [
        'Intended Audience :: Developers',
        'License :: OSI Approved :: BSD License',
        'Operating System :: MacOS :: MacOS X',
        'Programming Language :: Python :: 3',
    ],
) 

この tarball を公に配布する予定はないことに注意してください。これは内部展開のみを目的としています (したがって、プリコンパイルされているか、OSX のみに関連付けられているかは気にしません)。

4

1 に答える 1

0

アダム、試しましたsetup.py bdist_eggか?

を使用してインストールできるeggファイルが生成されますeasy_installpip残念ながら、ではありません)。

また、プロジェクトが見つからないようmylibrary/__init__.pyです。

不足している「init」ファイルを追加したらsetup.py、「so」ファイルを結果の卵ファイルに含めるのに十分スマートになるかどうか知りたいです。何らかの方法でそれを作成する必要がある可能性があります (私自身、「.so」Python 拡張機能を扱う理由がなかったので、方法がわかりません)。

次の例では、それgevent-1.0b2-py2.7-macosx-10.4-x86_64.eggを使用して構築されていsetup.py bdist_eggます。pypi/現在のディレクトリの下のディレクトリに配置しました。pypi/同じディレクトリに戦略的に配置した他の依存関係がたまたまあることを私は知っています。

easy_install --allow-hosts=None \
             --find-links=pypi/ \
             --always-unzip \
             pypi/gevent-1.0b2-py2.7-macosx-10.4-x86_64.egg

余分な依存関係がないように見えるため、ケースはより単純です。したがって、次のようにします。

easy_install --always-unzip \
             dist/mylibrary_py3mac-0.1.1-py2.7-macosx-10.4-x86_64.egg

dist/ディレクトリは、setup.py bdist_eggが呼び出されたときにビルドされた卵ファイルが移動する場所であることに注意してください。

于 2012-08-08T00:21:12.493 に答える