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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python包安装脚本安装二进制可执行文件相关的知识,希望对你有一定的参考价值。

我有一个包awesomepkgsetup.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

答案

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

  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) 我也使用subprocess而不是system,但结果应该是相同的。
  3. 我将此脚本添加到scriptssetup()关键字中
另一答案

从一个包内可以使用

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

以上是关于Python包安装脚本安装二进制可执行文件的主要内容,如果未能解决你的问题,请参考以下文章

如何在可执行文件附近生成 dsym 文件,而不是在捆绑包之外,最好没有安装后脚本?

如何将python脚本编译为二进制可执行文件

怎么把 python 打包成 exe 可执行文件

python 学习如何将Python脚本打包成可执行的exe文件#520表白代码

将Python脚本打包成可执行文件

如何让Python脚本在cmd下执行