我們如何啓動ipython REPL並指示它將一些命令行參數傳遞給底層python解釋器?在ipython中發送python命令行參數
例如,我們可以通過使用
python -v
打開增加冗長蟒蛇REPL但我看不出如何打開IPython中時,通過傳遞標誌。
我們如何啓動ipython REPL並指示它將一些命令行參數傳遞給底層python解釋器?在ipython中發送python命令行參數
例如,我們可以通過使用
python -v
打開增加冗長蟒蛇REPL但我看不出如何打開IPython中時,通過傳遞標誌。
我會說這樣做將明確推出ipython
與蟒蛇的最佳方式:
python /usr/bin/ipython
爲ipython
可執行文件僅僅是一個python腳本;或者你可以告訴巨蟒加載ipython
庫推出ipython
:
python -m IPython.frontend.terminal.ipapp
,然後你可以添加所有的原生的Python參數:
python -v /usr/bin/ipython
python -v -m IPython.frontend.terminal.ipapp
HTH
這-v
選項影響的行爲的翻譯本身,而不僅僅是REPL。無論您是否添加-i
選項,都可以獲得額外的導入信息。
這裏的默認腳本啓動ipython
(或至少一個的那個版本)
1522:~/mypy$ cat /usr/local/bin/ipython3.5
#!/usr/local/bin/python3.5
# -*- coding: utf-8 -*-
import re
import sys
from IPython import start_ipython
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(start_ipython())
,並從IPython的會話中:
In [1153]: from IPython import start_ipython
In [1154]: start_ipython??
String form: <function start_ipython at 0xb697edac>
File: /usr/lib/python3/dist-packages/IPython/__init__.py
Definition: start_ipython(argv=None, **kwargs)
Source:
def start_ipython(argv=None, **kwargs):
"..."
from IPython.terminal.ipapp import launch_new_instance
return launch_new_instance(argv=argv, **kwargs)
最終,argv
被傳遞到解析器。 Ipython使用從其配置文件派生的參數填充該解析器。因此,您有幾個設置參數的選項 - 默認配置,配置文件配置和命令行。但所有這些都是在口譯員啓動之後。有些事情的行爲與解釋器REPL相同,但不是全部(-m
,但不是-v
)。
當使用-v
作爲zmo建議時,我們看到ipython
代碼的所有進口 - 這是很多的代碼。你對這些感興趣嗎?還是你對與自己的腳本相關的進口產品更感興趣?
我用ipython
很多來測試答案,特別是對於numpy
。實際上,我的默認ipython
呼叫有--pylab
標誌。但爲了測試獨立腳本,我使用普通的python
(通常從我的編輯器中的終端窗口調用)。有時候,雖然我會%run
從ipython
的腳本。將模塊加載到主工作區中,可以輕鬆地對功能執行%timeit
測試。
其他ipython
腳本使用
#!/usr/bin/python
import sys
from pkg_resources import load_entry_point
if __name__ == '__main__':
sys.exit(
load_entry_point(...)
我不使用這種風格編寫很多代碼,但我看不出那樣的啓動可以通過傳遞argv
來解釋。在模塊加載並開始運行時,解釋器已經在運行。
一般來說,它看起來像ipython
處理基本相同的方式作爲常規python
像-i
,-m
,-c
選項。它可以用自己的代碼來做,而不是委託給口譯員。但是像-v
,-O
,-t
這樣的東西適用於解釋器,而不是REPL,並且不是由ipython
代碼來處理。
你可以自己編寫ipython
shebang腳本。
在這裏,我抄我的ipython
腳本,並添加了-v
#!/usr/local/bin/python3.5 -v
# -*- coding: utf-8 -*-
import re
import sys
from IPython import start_ipython
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(start_ipython())
現在,當我執行./vipython
我得到在啓動和關閉的import
信息的網頁。
我從其他SO問題收集我可能無法將多個選項添加到這樣一個shebang行。
How to use multiple arguments with a shebang (i.e. #!)?
因此,例如
#!/usr/local/bin/python3.5 -vv
作品,但
#!/usr/local/bin/python3.5 -v -v
沒有 - 它給了我
1008:~/mypy$ ./vipython
Unknown option: -
usage: /usr/local/bin/python3.5 [option] ... [-c cmd | -m mod | file | -] [arg] ...
Try `python -h' for more information.
在緊要關頭,你可以使用[環境變量](https://docs.pyth例如on.org/3/using/cmdline.html#environment-variables)。 'PYTHONVERBOSE'。 –