一些上下文:我有一些C代码,在编译时可以像这样在终端中调用:./my_excec -params它生成一些我在python中用于生成图表的文件,以及其他内容。
我想将所有内容都打包在python库中,包括C代码和python代码。C代码不是python扩展(将来会很好,但现在不会)。
我有一个make文件来编译C代码,我知道可以从setup.py调用它,如下所示:
subprocess.call(['make', '-C', 'word2vec-src'])
我想要做的是:pip install my_module应该调用makefile,编译C,以便用户可以调用二进制文件:my_excec -params并且还可以在其周围导入python代码。
我遇到的问题是包装python包时。我data_files在setup()这样使用选项:data_files=[('bin', ['bin/binary_file'])],将文件从bin移到安装文件夹(在虚拟环境中),然后可以调用它们。但是,当打包还将压缩文件放到tarball中时,当我打电话给pip install my_module`时,它会将压缩文件从我的计算机中放出来。
谢谢。
我能够找到一个非常简单的解决方案。
正如我所说,我的主要问题是我正在打包编译后的文件。要从 tarball/zip 中排除这些文件,只需将其放在 MANIFEST.in 中:prune bin。
然后只需要从 setup.py 调用 makefile:
directory = 'bin'
if not os.path.exists(directory):
os.makedirs(directory)
subprocess.call(['make', '-C', 'src'])
Run Code Online (Sandbox Code Playgroud)
有了这个,当有人pip install whatever要调用 make 文件并将二进制文件放在上面时bin(必须在 make 文件中指定)。
然后只需要说设置复制这些文件:
setup(
...
data_files=[('bin', ['bin/binaries'])],
)
Run Code Online (Sandbox Code Playgroud)
完毕!希望有人觉得这很有用:)
| 归档时间: |
|
| 查看次数: |
1366 次 |
| 最近记录: |