如何解决在setup.py中将“脚本”作为Python软件包的一部分安装在用户的路径上,并被识别为Python脚本
当用户使用pip
从PyPI安装我的软件包时,我试图在用户的路径上提供Python脚本:
pip install MyPackage
MyPackage
在PyPI上,并且显然已成功安装在conda
虚拟环境中。 setup.py
文件(摘录)如下所示:
try:
from setuptools import setup
except ImportError:
from distutils.core import setup
config = {
'name': 'MyPackage','version': '0.2.1.dev','install_requires': [...],'packages': [
'MyPackage','MyPackage.utils'
],'py_modules': [
'MyCLI',],'scripts': [
'MyPackage/MyCLI.py',...
在GNU / Linux上,当我键入MyCLI
并单击Tab时,它将成功自动完成至MyCLI.py
。当我问which MyCLI.py
时,它向我显示了虚拟环境文件夹中Python脚本的完全限定路径:
$ which MyCLI.py
/home/arthur/Applications/miniconda3/envs/MyPackage/bin/MyCLI.py
MyCLI.py
使用fire
包装Python类,在命令行中公开其方法,将文档字符串显示为帮助文档,并解析参数。看起来像:
'''
My Command Line Interface
'''
class CLIRuntime(object):
def run(self):
do_something()
if __name__ == '__main__':
import fire
fire.Fire(CLIRuntime)
如果我使用Python解释器运行此脚本,它将正确执行。
python $(which MyCLI.py)
问题是,当我尝试运行它而不指定Python解释器时,似乎认为它是bash脚本或二进制文件并破坏了我的终端会话:
$ MyCLI.py
/home/arthur/Applications/miniconda3/envs/MyPackage/bin/MyCLI.py: line 8:
My Command Line Interface
: No such file or directory
from: can't read /var/mail/__future__
如何更改setup.py
,以便该脚本可在用户路径上使用,但也称为/作为Python脚本运行?
我想指出的是,如果我使用pip
在可编辑模式(pip install -e .
)中从源代码安装此软件包,则MyCLI.py
在我的路径上,可以作为Python脚本正确运行。从PyPI安装时,它似乎不起作用。
解决方法
要告诉您的shell应该使用什么程序来执行脚本文件,您需要在脚本的第一行添加
#!python
或
#!/usr/bin/env python
可以解决问题。如果您使用的是Python 3,请改用python3
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。