distutilsのでプリコンパイルされたPython拡張モジュールを配布
-
20-09-2019 - |
質問
1クイック今日:私はニシキヘビのdistutilsライブラリーの中の出入りのを学んでいる、と私は私のパッケージとPython拡張モジュール(.pyd)を含むようにしたいと思います。私はお勧めの方法はdistutilsのパッケージが作成された時点での拡張子をコンパイルすることです、もちろん知っているが、これはすべてを取得するためにいくつかの重要な演奏を取るために起こっているので、多くのソースファイルにまたがると、いくつかの外部LIBSを参照してかなり複雑な拡張であります右ワーキングます。
一方で、私は、Visual Studioから出てくる延長の知られている作業のビルドを持っている、と私は他の問題に集中できるようにするために、一時的なソリューションとして、インストーラでそれを使用したいと思います。これらは明らかに明示の.py拡張子を持っている必要がありますので、私は、しかし、モジュールとしてそれを指定することはできません。どのように私は、プリコンパイル拡張モジュールを含めたいというのが私のsetup.pyで示しているだろうか?
(Pythonの3.1、それが重要な場合)
解決
マニフェストテンプレートを試してみてください。
http://docs.python.org /distutils/sourcedist.html#specifying-the-files-to-distributeする
他のヒント
私はExtension.build_extensionをオーバーライドすることによってこれを解決します:
setup_args = { ... }
if platform.system() == 'Windows':
class my_build_ext(build_ext):
def build_extension(self, ext):
''' Copies the already-compiled pyd
'''
import shutil
import os.path
try:
os.makedirs(os.path.dirname(self.get_ext_fullpath(ext.name)))
except WindowsError, e:
if e.winerror != 183: # already exists
raise
shutil.copyfile(os.path.join(this_dir, r'..\..\bin\Python%d%d\my.pyd' % sys.version_info[0:2]), self.get_ext_fullpath(ext.name))
setup_args['cmdclass'] = {'build_ext': my_build_ext }
setup(**setup_args)
package_dataを使用してみてください: http://docs.python.org/distutils/ setupscript#インストール・パッケージ・データの