【问题标题】:Distribute executable with python pip使用 python pip 分发可执行文件
【发布时间】:2018-07-02 16:10:02
【问题描述】:

我正在尝试分发 CLI 工具以供公众使用。我的代码包含一个可执行文件(用 golang 编写)和一个辅助 python 脚本(由可执行文件使用)。

我最初的方法是使用它从 python 调用可执行文件,其中 main 是 cli 命令的入口点。

import os
import subprocess
import sys

def main():
    dst = os.path.dirname(os.path.realpath(__file__))+'/golangexec'
    arg_list = [dst,"myclitool"]
    cmd_args = sys.argv[1:]
    args = arg_list + cmd_args
    subprocess.call(args)
    return

`

我的包裹是这个

project   

│   setup.py    
│   
└───myclitool
│   │   golangexec
│   │   __init__.py
|   |   pyhelper.py
|   |   run.py

setup.py 是:

from setuptools import setup


setup(

name='mypkg',
packages=['myclitool'],
version='0.1',
entry_points='''
    [console_scripts]
    mycli=myclitool.run:main
'''
)

但是,这不会将我的可执行文件与其余文件安装在同一位置。

我试图将所有内容都放在包数据中,但是在使用子进程运行 exe 时遇到权限被拒绝错误。

我做错了什么?

【问题讨论】:

  • 通过package_data 捆绑可执行文件是正确的方法。我宁愿找出为什么会引发权限错误 - 安装时您是否错过了golangexec 文件上的可执行位?
  • 嗯,package_data数据,不是可执行文件,对吧?对于可执行文件setuptoolsscripts

标签: python pip command-line-interface setuptools


【解决方案1】:

不是 pythonic 解决方案,但对于任何遇到同样问题的人来说,npm 允许在 package.json 文件中使用 bin 参数,您可以在其中直接链接您的可执行文件。

{
  "name": "myclipkg",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "author": "",
  "license": "ISC",
  "bin": {
    "myclitool": "./golangexec"
   },
  "homepage": "https://gitlab.com/myclipkg/cli#README"
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-14
    • 2023-03-21
    • 2010-11-27
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多