我想要得到一個在Ubuntu 17中工作的python項目,但我在模塊加載時遇到了問題。我已經能夠用一個微不足道的例子來分析問題。此示例適用於Windows 10,但不適用於Ubuntu。幫助得到這個工作將不勝感激!無法在父目錄中導入模塊
這裏是我下面的步驟:
首先,我創建在〜/ dev目錄下的項目目錄名爲code_playground。接下來,我創建的virtualenv爲這個項目:
~/dev$ which virtualenv
/usr/local/bin/virtualenv
~/dev$ virtualenv -p python3.6 code_playground/
Running virtualenv with interpreter /usr/bin/python3.6
Using base prefix '/usr'
New python executable in /home/user/dev/code_playground/bin/python3.6
Also creating executable in /home/user/dev/code_playground/bin/python
Installing setuptools, pip, wheel...done.
我激活虛擬環境:
~/dev/code_playground$ source ./bin/activate
(code_playground) ~/dev/code_playground$
看來工作:
(code_playground) ~/dev/code_playground$ which python
/home/user/dev/code_playground/bin/python
我創建了一個名爲mod_a.py與文件一個簡單的功能:
def print_name(name):
print('Your name is {0}'.format(name))
現在我創建一個子目錄稱爲子:
(code playground) ~/dev/code_playground$ mkdir sub
(code playground) ~/dev/code_playground$ cd sub
(code playground) ~/dev/code_playground/sub$
裏子,我創建了一個名爲mod_b.py這些內容的文件:
from mod_a import print_name
print_name('Joe')
我嘗試運行mod_b.py,但我得到的錯誤:
(code playground) ~/dev/code_playground/sub$ python mod_b.py
Traceback (most recent call last):
File "mod_b.py", line 1, in <module>
from mod_a import print_name
ImportError: No module named mod_a
添加'進口sys'和'print(sys.path)'在腳本開始處......並檢查路徑。但是,在啓動_python_之前,很可能必須'導出PYTHONPATH =〜/ dev/code_playground:$ {PYTHONPATH}'。 – CristiFati
謝謝@CrisiFati。這確實解決了這個問題。我想知道,你有什麼洞察力爲什麼這需要在Linux中,但在Windows中沒有它?在virtualenv之後,但在設置PYTHONPATH變量之前,這裏是我從mod_b.py得到的sys.path: '['/ home/user/dev/code_playground/sub', '/ home/user/dev/code_playground/lib/python36.zip', '/home/user/dev/code_playground/lib/python3.6', '/home/user/dev/code_playground/lib/python3.6/lib-dynload', '/usr/lib/python3.6', '/home/user/dev/code_playground/lib/python3.6/site-packages']' –
我剛剛注意到,在Windows中,code_playground目錄包含在sys中。運行virtualenv之後的路徑,而不必設置PYTHONPATH。但是,在Linux中並非如此。我想這就是它在Windows中工作的原因。@CristiFati(或任何其他人),你碰巧有什麼洞察力,爲什麼這是? –