[英]How to make the Shebang be able to choose the correct Python interpreter between python3 and python3.5
我正在python3中開發一組腳本,因為shebang我用它:
#!/usr/bin/env python3
一切順利,但在一些執行的虛擬機中,解釋器的名稱是python3.5
。 我希望能夠在兩個環境中執行我的腳本,但我無法更改虛擬機的文件系統(所以我放棄了解決方案,比如從python3.5到python3的鏈接)
我看看env
人,但我找不到任何方法來指定搜索模式或類似的東西。
我嘗試在我的會話開始時設置一個alias
,指向正確的python解釋器但是env不使用它。
我唯一的解決方案是調用我的腳本說明哪個解釋器必須使用但是非常煩人:
python3.5 myscript.py
歡迎任何想法!謝謝!
無需引入單獨的shell和python腳本,單個文件可以同時存在!
用這個順序替換你的shebang線:
#!/bin/sh
# Shell commands follow
# Next line is bilingual: it starts a comment in Python, and is a no-op in shell
""":"
# Find a suitable python interpreter (adapt for your specific needs)
for cmd in python3.5 python3 /opt/myspecialpython/bin/python3.5.99 ; do
command -v > /dev/null $cmd && exec $cmd $0 "$@"
done
echo "OMG Python not found, exiting!!!!!11!!eleven" >2
exit 2
":"""
# Previous line is bilingual: it ends a comment in Python, and is a no-op in shell
# Shell commands end here
# Python script follows (example commands shown)
import sys
print ("running Python!")
print (sys.argv)
如果你可以安裝腳本,你也可以安裝一個名為python3.5
的包裝器,只需調度python3
。
#!/bin/sh
exec env python3 "$@"
你顯然需要像你安裝的其他人一樣chmod a+x
這個腳本。
你必須在系統python3.5
目錄之后將腳本的目錄添加到你的PATH
,以避免它進入無限循環,並且只在系統尚未提供python3.5
時才使用此腳本作為后備。
如您所述, env
不知道或不關心您的個人shell別名或函數,也不提供自行運行的二進制文件的動態計算; 但你有殼在您的處置(和Python當然,一旦你找到它!) -它只是使用了PATH
所以如果你能在一個目錄是在你安裝其它腳本PATH
(必須是為案件#!/usr/bin/env
shebang首先是有意義的)你也可以在那里存儲這個腳本。
正如評論中所指出的那樣,僅安裝python3.5
並且至少可選地使python3
成為符號鏈接是奇怪的和用戶敵意的,所以也許你最終可以說服維護你正在安裝的圖像的人提供這個。
您可以創建一個使用python 3.5的shell腳本(如果已安裝),否則使用python 3並使用正確的版本執行腳本。
不需要python shebang。
在shell腳本中,您可以測試which python3.5
返回一些內容; 如果是,則安裝python3.5,否則你必須使用python3
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.