繁体   English   中英

如何在 Python 中创建可以与 PIP 一起安装的 CLI?

[英]How to create a CLI in Python that can be installed with PIP?

正如标题所示,我正在尝试使 python 脚本可以从命令行访问。 我发现像clickargv这样的库可以轻松访问从命令行传递的 arguments,但用户仍然必须通过 Python 运行脚本。

代替

python /location/to/myscript.py

我希望能够做到

myscript

从任何目录

据我了解,我可以通过编辑我的 PATH 变量在我的计算机上实现这一点。 但是,我希望能够简单地做:

pip install myscript

然后通过从任何地方键入myscript来访问脚本。 我会在setup.py中放入一些特殊代码吗?

您可以使用setuptools执行此setuptools

一个不错的setup.py示例(假设您的包需要 pandas 和 numpy):

import setuptools
setuptools.setup(
    name='myscript',
    version='1.0',
    scripts=['./scripts/myscript'],
    author='Me',
    description='This runs my script which is great.',
    packages=['lib.myscript']
    install_requires=[
        'setuptools',
        'pandas >= 0.22.0',
        'numpy >= 1.16.0'
    ],
    python_requires='>=3.5'
)

您的目录应设置如下:

[dkennetz package]$ ls
lib scripts setup.py

里面的 lib 将是:

[dkennetz package]$ ls lib
myscript

myscript内部将是:

[dkennetz package]$ ls lib/myscript
__main__.py
__init__.py
helper_module1.py
helper_module2.py

main 将用于调用您的函数并执行您想做的任何操作。

内部脚本将是:

[dkennetz package]$ ls scripts
myscript

myscript的内容是:

#!/usr/bin/env bash

if [[ ! $@ ]]; then
    python3 -m myscript -h
else
    python3 -m myscript $@
fi

然后运行你做: python setup.py install

这将安装您的程序以及您在 setup.py 中的install_requires=[]中包含的所有依赖项,并将myscript作为命令行模块安装:

[dkennetz ~]$ myscript

使用console_scripts挂钩到特定的 Python 方法(不调用整个可执行文件), setup.py文件:

from setuptools import setup
setup(
    ...
    entry_points = {
        'console_scripts': ['mybinary=mymodule.command_line:cli'],
    },
    name='mymodule',
    ...
)

command_line.py脚本将是:

import mymodule

def cli():
    print("Hello world!")

项目目录如下所示:

myproject/
    mymodule/
        __init__.py
        command_line.py
        ...
    setup.py

有关详细信息,请参阅包装文档

假设您在 bash shell 中并且安装了 python 3 并且您希望能够执行您的请求,您需要将脚本文件的路径附加到您的主目录中的.bash_profile文件中的 PATH 变量。 此外,在您的 python 脚本文件中,您需要将类似于以下内容的内容作为脚本的第一行:

#!/usr/bin/env python3

此外,您可以从脚本文件中删除扩展名 (.py),例如,在我上面的示例中,与 script.py 相比,文件名是一个脚本。

您还需要将文件名的权限设置为

chmod 755 文件名

如果您希望脚本可在系统范围内访问,则需要修改 /etc/profile 并添加到文件底部:

export PATH=$PATH:/path/to/script

或者,如果您将 python 脚本文件移动到/usr/local/bin ,则可能不需要进行任何配置文件更改,因为该目录通常已在 PATH 中。

要查看 PATH 的值,请在 shell 中发出以下命令

echo $PATH

我知道这个问题比较老,对于使用setuptools的项目,肯定会使用Tombart 的答案

也就是说,我一直在使用诗歌,并且使用.toml文件,如果这就是你使用的,因为这可能是其他人会搜索的内容,这就是你如何 package 一个带有 toml 文件的脚本(至少带有诗歌

[project.scripts]
myscript = "mybinary=mymodule.command_line:cli"

不确定这是否适用于 flit 或任何其他 package 经理,但它适用于诗歌

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM