簡體   English   中英

從導入導入到python解釋器主命名空間

[英]Import into python interpreter main namespace from an import

如何使用一個命令/導入從解釋器運行一堆導入和路徑追加? 如果導入另一個為我運行命令的模塊,則導入在主名稱空間中不可用。 與運行bash腳本類似,該腳本可在當前會話中修改/添加命令和變量。

恩。

import os, ...
sys.path.append(...)

如果我理解正確,那么您只是在尋找from … import …語句。 例如:

lotsostuff.py:

import json
def foo(): pass

現在:

$ python3.3
>>> from lotsostuff import *
>>> json
<module 'json' from '/usr/local/lib/python3.3/json/__init__.py'>
>>> foo
<function lotsostuff.foo>

但是,您可能需要考慮其他選擇。 如果您只是想控制解釋器會話的啟動,則可以執行以下操作:

$ PYTHONSTARTUP=lotsostuff.py
$ python3.3
>>> json
<module 'json' from '/usr/local/lib/python3.3/json/__init__.py'>
>>> foo
<function __main__.foo>

注意最后一行的不同。 您現在在__main__命名空間中運行lotsostuff ,而不是在單獨的命名空間中運行並獲取其所有成員。


同理:

$ python3.3 -i lotsostuff.py
>>> json
<module 'json' from '/usr/local/lib/python3.3/json/__init__.py'>

如果您每次在會話中都想這樣做,通常會使用PYTHONSTARTUP如果只想一次,則使用-i


如果您想在會話中間而不是在啟動時做同樣的事情……好吧,您不能直接這樣做,但是您可以非常接近exec (Python 3.x)(或Python 2中的execfile )。 X)。


如果您確實想按照自己的描述進行操作(作為模塊的常規導入方式導入模塊,除了合並到您的命名空間中而不是單獨合並),則需要自定義導入過程。 使用importlib並不難; 如果您不是使用Python 3.2或更高版本,則需要使用imp更多工作。


兩者之間的差別差不多. ./foo . ./foo而不是我認為您正在尋找的bash腳本中的./foo

如果您使用的是ipython ,則還有更酷的選擇。 (如果您不使用ipython ,則可能需要檢查一下。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM