[英]Can't import own packages in Python 2.7
我在將自己的程序包導入程序時遇到了一些麻煩,因此我創建了一個測試文件夾以嘗試了解我在做什么錯。
這是最簡單的事情,但我仍然無法正常工作。
這是我的文件夾結構:
test
> pack1
> __init__.py
> mod1.py
> pack2
> __init__.py
> mod2.py
兩個init
文件都為空。
mod1
看起來像這樣:
def foo():
print "hello"
和mod2
看起來像這樣
from pack1.mod1 import *
foo()
在PyCharm中運行代碼時,一切正常! 但是當嘗試從cmd執行時,我得到ImportError: No module named pack1.mod1
是sys.path.insert(0, "../pack1")
我唯一的選擇,還是cmd無法配合使用的另一個原因?
無論版本如何,python都必須知道在哪里尋找軟件包。 操縱sys.path
是一個快速而骯臟的選擇,如果您的代碼變得更加復雜,將來會有時中斷。 嘗試制作一個軟件包並通過pip install -e
或python setup.py develop
pip install -e
(在漂亮的distutils簡介中查找此內容)
在常規Python中,只有某些文件夾會被檢查以導入軟件包,而您擁有的test
文件夾似乎不是這些文件之一。 要更改此設置,請在mod2.py
編輯sys.path
, 然后導入pack1.mod1
。
mod2.py
import sys
# Add test folder to sys.path
sys.path.append("../")
from pack1.mod1 import *
# Prints "hello"!
foo()
另外,除了編輯sys.path
,您還可以將pack1
文件夾添加到Python目錄中的Lib
文件夾中。 這將起作用,因為默認情況下,這是sys.path
中的文件夾之一。
Python 2.7
> Lib
> pack1
> __init__.py
> mod1.py
mod2.py
from pack1.mod1 import *
# Prints "hello"!
foo()
您說您通過以下方式執行它: (Documents)/test/pack2> python mod2.py
問題是pack2.mod2.py
不知道pack1
在哪里。
作為模塊執行:( (Documents)/test> python -m pack2.mod2
如果您不想修改腳本或目錄布局,則可以使用PYTHONPATH
環境變量。
例
vagrant@h:/tmp/test/pack2$ python mod2.py
Traceback (most recent call last):
File "mod2.py", line 1, in <module>
from pack1.mod1 import *
ImportError: No module named pack1.mod1
vagrant@h:/tmp/test/pack2$ export PYTHONPATH="${PYTHONPATH}:/tmp/test"
vagrant@h:/tmp/test/pack2$ python mod2.py
hello
vagrant@h:/tmp/test/pack2$
有關搜索模塊的更多信息-https: //docs.python.org/2/tutorial/modules.html#the-module-search-path
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.