build_ext
ピップフレンドリーにしようとしているファンキーな拡張機能を構築するためのカスタムを定義しました。以下は、私がやっていることのトリミングされたバージョンです。
foo_ext = Extension(
name='foo/_foo',
sources=foo_sources,
)
class MyBuildExt(build_ext):
def build_extension(self, ext):
# This standalone script builds the __init__.py file
# and some .h files for the extension
check_call(['python', 'build_init_file.py'])
# Now that we've created all the init and .h code
# build the C/C++ extension using setuptools/distutils
build_ext.build_extension(self, ext)
# Include the generated __init__.py in the build directory
# which is something like `build/lib.linux-x86/foo/`.
# How can I get setuptools/distutils to install the
# generated file automatically?!
generated_file = 'Source/foo/__init__.py'
output_path = '/'.join(self.get_outputs()[0].split('/')[:-1])
self.move_file(generated_file, output_path)
setup(
...,
ext_modules = [foo_ext],
cmdclass={'build_ext' : MyBuildExt},
)
このモジュールをパッケージ化して pip でインストールするとfoo
、virtualenv の site-packages ディレクトリにモジュールができました。ディレクトリ構造は次のようになります。
foo/
foo/__init__.py
foo/_foo.so
このegg-info/SOURCES.txt
ファイルには、手動で作成/移動したファイルが含まれていません。コマンド__init__.py
を実行すると、virtualenv のサイト パッケージに残ります。pip でパッケージ全体を削除したいと思います。ビルド ディレクトリに手動で移動した生成ファイルを、インストールされている出力ファイルのリストに追加するにはどうすればよいですか?pip uninstall foo
foo/__init__.py
__init__.py
これは嫌でハッキーだと思うので、嫌でハッキーな答えを歓迎します!
試み:
- 追加
packages=['foo']
-- 私がそうすると、pip は拡張機能をビルドしません。また、パッケージ名のファイル パス/名前空間のバージョンを調整しようとしましたが、違いはありません。