首页 > 解决方案 > 如何在 Python 中创建可以使用 PIP 安装的 CLI?

问题描述

正如标题所暗示的,我正在尝试使 python 脚本可以从命令行访问。我发现了像clickargv这样的库,它们可以很容易地访问从命令行传递的参数,但是用户仍然必须通过 Python 运行脚本。

代替

python /location/to/myscript.py

我希望能够做到

myscript

从任何目录

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

pip install myscript

然后通过myscript在任何地方键入来访问脚本。是否有一些特殊的代码我会放在setup.py

标签: pythonpipcommand-line-interface

解决方案


你可以这样做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

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

[dkennetz ~]$ myscript

推荐阅读