5

一些上下文:我有一些 C 代码,编译后我可以像这样在终端中调用:./my_excec -params它生成一些文件,我在 python 中使用这些文件来生成图表和其他东西。

我想将 C 代码和 python 代码的所有内容都打包到 python 库中。C 代码不是 python 扩展(prolly 将在未来出现,但现在不是)。

我有一个 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` 时,会将编译的文件从我的计算机中放入。

谢谢。

4

1 回答 1

5

我能够找到一个非常简单的解决方案。

正如我所说,我的主要问题是我正在打包编译的文件。要从 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'])

这样,当有人确实pip install whatever要调用 make 文件并将二进制文件放在上面时bin(必须在 make 文件上指定它)。

然后只需要说出复制这些文件的设置:

setup(
...
data_files=[('bin', ['bin/binaries'])],
)

完毕!希望有人发现这很有用:)

于 2013-08-26T21:33:55.843 回答