Python包安装脚本安装二进制可执行文件

Ain*_*tor 8 python pip setuptools

我有一个awesomepkg带有setup.py. 我想awesometool在用户运行pip install awesomepkg. 我已经为 编译了不同的操作系统版本awesometool,它bin/位于setup.py.

但是,我找不到配置setup.py. 我尝试了以下方法:

  1. 在 中使用scripts=[]关键字setup()。不幸的是,“可执行文件”必须是一个 python 脚本。

  2. 所以我尝试使用os.system('bin/awesometool')委托将二进制文件包装在 python 脚本中。它也失败了,因为包装脚本被 pip 复制到其他地方,所以它不知道相对路径在哪里bin/awesometool

  3. 另一个可能的解决方案是data_files关键字。但是,由于某种原因,数据文件没有复制到site_packages安装目录,即使运行python setup.py bdist_wheel表明它们已被复制。

参考:https : //docs.python.org/3/distutils/setupscript.html

小智 6

我自己刚刚遇到了这个问题。我的解决方案是三倍。

  1. 我将程序,例如awesometool,添加到我的包结构中,以便我可以通过package_data关键字添加它: package_data={'awesomepkg': ['awesometool']}。这会导致它在安装期间实际上被复制到与主init .py相同的文件夹中。

  2. 我制作了一个类似于您的步骤 2 的 python 脚本。但是,我首先导入awesomepkg并使用awesomepkg.__path__来获取包安装文件夹的绝对路径,而不是相对路径。这看起来像:

    import awesomepkg
    import subprocess as sp
    import sys
    
    path = awesomepkg.__path__[0]
    command = path + "/awesometool"
    sp.call([command] + sys.argv)
    
    Run Code Online (Sandbox Code Playgroud)

    我也使用了 subprocess 而不是 system,但结果应该是一样的。

  3. 我将此脚本添加到scripts关键字setup()