Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用pythonpip分发可执行文件_Python_Pip_Command Line Interface_Setuptools - Fatal编程技术网

使用pythonpip分发可执行文件

使用pythonpip分发可执行文件,python,pip,command-line-interface,setuptools,Python,Pip,Command Line Interface,Setuptools,我正在尝试分发一个供公众使用的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

我正在尝试分发一个供公众使用的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时,我会遇到权限拒绝错误


我做错了什么?

不是一个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"
}

通过
package\u data
捆绑可执行文件是正确的方法。我想找出引发权限错误的原因-安装时是否错过了
golangexec
文件上的可执行位?嗯,
package\u data
是数据,而不是可执行文件,对吗?对于可执行文件
设置工具
具有
脚本