這聽起來可能很傻,但我只需要知道這是怎么可能的。
我有一個 python 檔案'hello.py',它接受使用 argParse 的爭論。
代碼如下:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--message", type=str, required=True)
args = parser.parse_args()
message = args.message
print(f'Your message: {message}' )
運行時代碼按預期作業:python hello.py --message "Hi my name is Tony"
我得到以下輸出:
您的留言:嗨,我的名字是托尼
但是,要求是當我執行命令時,我想以一種python hello.py
可以替換為唯一命令的方式運行它。
想要它以我可以hello
從任何目錄運行此命令的方式。有點像環境變數一樣需要它。
我想把它做成一個 Python 包,上傳到 pypi.org,在有人安裝 pip 之后,他們應該能夠運行類似的東西: hello --message "Hi my name is Tony"
有誰知道如何實作這個設定?
uj5u.com熱心網友回復:
這在類 Unix 系統和 Windows 中是不同的。類 Unix 更容易。
類 Unix
你需要做四件事:
- 將您的腳本重命名為
hello
. (如果您將其保留為 ,它也將起作用hello.py
,但隨后您將其稱為hello.py --message "Hi my name is Tony"
)。 - 授予它執行權限:
chmod 755 hello
. - 添加一個“ shebang line ”。shebang 行是腳本的第一行,以
#!
. 這不是 Python 功能,而是 Unix shell 功能。對于 Python,這只是一個注釋。但是 Unix shell 會查看該行以確定它應該使用什么程式來運行該檔案。如今,Python 程式最安全的 shebang 行似乎是#!/usr/bin/env python3
因為某些系統默認情況下沒有“python”可執行檔案,它們只有“python3”可執行檔案。 - 將檔案放在“shell 路徑”中包含的目錄中。shell 路徑是 shell 在其中查找可執行檔案的目錄串列。運行
echo $PATH
以查看該目錄串列(它們由冒號分隔)。例如,當您鍵入 時ls
,shell 將按順序搜索該目錄串列,直到找到名稱為 的可執行檔案ls
。在該特定示例中,它通常會在/bin
目錄中找到它。對于初學者來說,在許多類 Unix 系統(如大多數 GNU/Linux 系統)hello
中,安裝是最好的選擇;/usr/local/bin
該目錄用于存放通過系統包管理器以外的任何方式添加到系統的可執行檔案。對于某些類 Unix 系統,如 Mac OS X,相應的目錄可能不同。
在初學者階段之外,您將想要使用 virtualenvs,并且在此答案之后閱讀virtualenv demystified將是一件好事。
視窗
Windows 不提供開箱即用的簡單解決方案,因此您需要使用第三方解決方案pyinstaller
,例如創建一個.exe
檔案,該檔案通常包含 Python 解釋器的副本。
還有一個更簡單的解決方案。您可以創建一個hello.bat
執行程式的檔案。假設python.exe
是 in C:\Program Files\Python
,即hello.py
in C:\Users\Alice
,檔案的內容應該是:
"C:\Program Files\Python\python.exe" "C:\Users\Alice\hello.py" %*
然后,您可以放入hello.bat
系統路徑中的目錄,例如C:\Windows
. 用戶無需輸入全部hello.bat
;像.exe
檔案一樣,您可以省略擴展名,只需鍵入hello
.
%*
代表給定的引數,hello.bat
所以如果用戶輸入hello --message "Hi, I'm Tony"
,那么批處理檔案將執行C:\...\python.exe C:\...\hello.py --message "Hi, I'm Tony"
。
畫中畫
假設您已經知道如何在 PyPI 中創建一個包,這完全是另一回事,您可以使用 的entry_points
引數setuptools.setup()
來做您想做的事。(同樣,我認為在 Windows 中實作這一點并不容易。)
uj5u.com熱心網友回復:
setuptools
您可以使用(請參閱setuptools 快速入門)將命令安裝為入口點。
作為對您的案例的快速而簡單的解決方案,您應該有一個包含以下檔案的目錄(根目錄):
root
| pyproject.toml
| setup.cfg
| hello.py
pyproject.toml:
[build-system]
requires = ["setuptools"]
build-backend = "setuptools.build_meta"
設定.cfg:
[options.entry_points]
console_scripts =
hello = hello:main
你好.py:
import argparse
def main():
parser = argparse.ArgumentParser()
parser.add_argument("--message", type=str, required=True)
args = parser.parse_args()
message = args.message
print(f'Your message: {message}' )
然后,您可以通過從根目錄運行:(python -m pip install .
不要忘記.
)來安裝命令(當然,您需要pip
安裝)。
安裝后,您應該能夠根據需要運行命令:hello --message "Hi my name is Tony"
uj5u.com熱心網友回復:
查看這篇文章:https ://gist.github.com/umangahuja1/51da3a453803f1f67f4eee5de129d4db
基本上你想要做的是修改你的腳本來告訴系統它應該使用 python 路徑而不是 shell 來運行。之后,您打開權限使其可執行,然后運行它。
uj5u.com熱心網友回復:
您可以使用 sys 獲取引數
import sys
然后得到這樣的引數:
args = sys.args()
當你運行它時,使用:
py hello.py argument1 argument2
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/490511.html
標籤:Python python-3.x python-2.7
上一篇:如何從文本創建變數并轉換坐標
下一篇:絕對初學者的Python乒乓游戲