依赖二进制文件的Python脚本......如何分发?

时间:2012-03-30 06:49:02

标签: python software-distribution

我有一个代码库,其中包含一些C ++代码和Python脚本,它们利用生成的二进制文件(通过subprocess模块)。

root/
    experiments/
        script_1.py (needs to call binary_1)
    clis/
        binary_1.cc
        binary_1

从Python脚本引用二进制文件的最佳方法是什么?

  • 从Python脚本目录到二进制文件的相对路径,它假定用户将从特定目录运行Python脚本
  • 只是二进制名称,假设用户已将二进制文件的目录添加到$PATH变量,或将二进制文件复制到/usr/local/bin或其他内容
  • 别的什么?

3 个答案:

答案 0 :(得分:1)

如果你的二进制文件是预编译的,你可以使用data_files参数来设置工具。将它安装在/ usr / local / bin中。

data_files=[("/usr/local/bin", glob("bin/*"))], ...

答案 1 :(得分:1)

您可以使用__file__找出Python脚本的位置,因此用户从何处运行脚本无关紧要。

path = os.path.normpath(os.path.join(
         os.path.dirname(__file__), '..', 'clis', 'binary_1'
       ))

答案 2 :(得分:-1)

根据我的经验,在Python程序中集成C(pp)代码的最佳方法是make a compiled Python module out of the C(pp) code,而不是像现在这样使用子进程模块。

除了更加一致和可读的Python代码库之外,您还可以获得模块化(解决$ PATH问题)的额外好处,并且可以use distutils as build tool。然后,分发也更容易,因为setup.py会自动化它。