簡體   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