我很難理解模塊導(dǎo)入如何在 Python 中工作(我從來(lái)沒(méi)有在任何其他語(yǔ)言之前做過(guò))。
假設(shè)我有:
myapp/__init__.py
myapp/myapp/myapp.py
myapp/myapp/SomeObject.py
myapp/tests/TestCase.py
現(xiàn)在我試圖得到這樣的東西:
myapp.py
===================
from myapp import SomeObject
# stuff ...
TestCase.py
===================
from myapp import SomeObject
# some tests on SomeObject
但是,我肯定做錯(cuò)了什么,因?yàn)?Python 看不到myapp
是一個(gè)模塊:
ImportError: No module named myapp
在您的特定情況下,它看起來(lái)像您正在嘗試從 myapp.py 和 TestCase.py 腳本導(dǎo)入SomeObject
。從 myapp.py,執(zhí)行
import SomeObject
因?yàn)樗谕粋€(gè)文件夾中。對(duì)于 TestCase.py,請(qǐng)執(zhí)行
from ..myapp import SomeObject
然而,這將工作只有當(dāng)你從包中導(dǎo)入 TestCase。如果你想直接運(yùn)行python TestCase.py
,你將不得不弄亂你的路徑。這可以在 Python 中完成:
import sys
sys.path.append("..")
from myapp import SomeObject
雖然這通常是不推薦的。
一般來(lái)說(shuō),如果你想讓其他人使用你的 Python 包,你應(yīng)該使用distutils來(lái)創(chuàng)建一個(gè)安裝腳本。這樣,任何人都可以使用像python setup.py install
這樣的命令輕松地安裝你的包,它將在他們的機(jī)器上隨處可見(jiàn)。如果你認(rèn)真對(duì)待這個(gè)包,你甚至可以將它添加到 Python 包索引PyPI中。
函數(shù)import
將文件查找到您的 PYTHONPATH env.變量和您的本地目錄中。因此,您可以將所有文件放在同一目錄中,也可以將路徑鍵入導(dǎo)出到終端:
export PYTHONPATH="$PYTHONPATH:/path_to_myapp/myapp/myapp/"
導(dǎo)出路徑是一個(gè)好方法。另一種方法是將.pth 添加到您的 site-packages 位置。在我的 mac 上,我的 python 將 site-packages 保存在下面顯示的 / Library / Python 中
/Library/Python/2.7/site-packages
我在 / Library / Python / 2.7 / site-packages / awesome.pth 創(chuàng)建了一個(gè)名為 awesome.pth 的文件,并在該文件中放置以下引用我的真棒模塊的路徑
/opt/awesome/custom_python_modules
你可以試試
from myapp.myapp import SomeObject
因?yàn)槟捻?xiàng)目名稱與 myapp.py 相同,這使它首先搜索項(xiàng)目文檔