Python包安装脚本安装二进制executab

2024-06-28 15:16:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个awesomepkgsetup.py的包。我想在用户运行pip install awesomepkg时,将二进制可执行文件awesometool安装到命令行以及包本身。我为awesometool编译了不同的操作系统版本,它位于setup.py旁边的bin/文件夹中。在

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

  1. setup()中使用scripts=[]关键字。不幸的是,“可执行文件”必须是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


Tags: installpip命令行用户py版本脚本文件夹
2条回答

包可以使用

import os
command = os.path.join(os.path.dirname(__file__), "awesometool")

我刚碰到这个问题。我的解决方案有三个方面。在

  1. 我在包结构中添加了程序,例如awesometool,这样我就可以通过package_data关键字添加它: package_data={'awesomepkg': ['awesometool']}。 这会导致它在安装过程中实际上被复制到maininit.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)
    

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

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

相关问题 更多 >