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

时间:2019-06-10 23:31:55

标签: python pip command-line-interface

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

代替

python /location/to/myscript.py

我希望能够做到

myscript

从任何目录

据我了解,我可以通过编辑PATH变量在计算机上实现此目的。但是,我希望能够做到:

pip install myscript

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

3 个答案:

答案 0 :(得分:3)

使用 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

See packaging documentation for more details

答案 1 :(得分:2)

您可以使用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

答案 2 :(得分:0)

假设您位于bash外壳中,并且已安装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