我發展/在我的本地目錄測試包。我想在解釋器(v2.5)中導入它,但sys.path不包含當前目錄。現在我輸入sys.path.insert(0,'.')
。有沒有更好的辦法?導入Python包從本地目錄入解釋
此外,
from . import mypackage
失敗,此錯誤:
ValueError: Attempted relative import in non-package
我發展/在我的本地目錄測試包。我想在解釋器(v2.5)中導入它,但sys.path不包含當前目錄。現在我輸入sys.path.insert(0,'.')
。有沒有更好的辦法?導入Python包從本地目錄入解釋
此外,
from . import mypackage
失敗,此錯誤:
ValueError: Attempted relative import in non-package
您只能在模塊中使用相對導入,而該模塊又作爲包的一部分導入 - 您的腳本或交互式解釋器不是,因此當然是from . import
(意思是「從我得到的相同包中導入從「導入」)不起作用。 import mypackage
一旦你確保mypackage
的父目錄在sys.path
(你如何設法從sys.path
得到你目前的目錄不知道我不知道 - 你有什麼奇怪的site.py,或... ?)
爲了讓您的當前目錄回到sys.path
其實也有比把它;-)有沒有更好的辦法。
使用sys.path
應該包括當前目錄了。
嘗試:
import .
或:
from . import sth
但它可能不是一個好的做法,那麼爲什麼不直接使用:
import mypackage
參見SYS文件。路徑:
http://docs.python.org/library/sys.html#sys.path
報價:
If the script directory is not available (e.g. if the interpreter is invoked interactively or if the script is read from standard input), path[0] is the empty string, which directs Python to search modules in the current directory first.
所以,沒有必要與sys.path的猴子,如果你開始從包含您的模塊目錄Python解釋器。
此外,導入你的包,只是做:
import mypackage
由於包含包的目錄已經在sys.path中,它應該工作的罰款。
如果在工作環境的其他地方存在類似的文件名,它將會失敗。 – 2016-06-07 12:45:21
@ JAR.JAR.beans當前的工作目錄應該是`sys.path`中的第一個,因此應該在工作環境中的任何其他位置找到文件。 – SpoonMeiser 2016-06-07 12:59:04
一個簡單的方法,使其工作就是使用Python的-m
標誌,例如從父目錄運行腳本python -m packagename.scriptname
。很顯然,在這種情況下,您需要一個__init__.py
文件來將您的目錄變成一個包。
保持簡單:
try:
from . import mymodule # "myapp" case
except:
import mymodule # "__main__" case
如果你想要所以它導入庫從一個特定的本地目錄中運行未經修改的Python腳本可以設置PYTHONPATH
環境變量 - 例如在bash:
export PYTHONPATH=/home/user/my_libs
python myscript.py
如果你只是希望它從當前工作目錄中導入使用.
符號:
export PYTHONPATH=.
python myscript.py
你在哪裏讀了「」是一個Python模塊? – 2009-07-11 01:40:23
@Lott:這是一個相對導入路徑,在這裏描述:http://docs.python.org/reference/simple_stmts.html#the-import-statement – projectshave 2009-07-11 02:41:14