簡體   English   中英

為什么 numpy import 的行為不同?

[英]Why does numpy import behave differently?

我使用以下命令在 Ubuntu 16.04 LTS 機器上的 python3 虛擬環境中安裝 numpy。

我的目標是在我的 venv 中默認使用 python 3.5 並學習 numpy。 我不應該顯式使用python3 我覺得有一些重疊/錯誤,如果現在忽略它可能是一個更大的問題。 另外,我的虛擬環境中沒有安裝 python 2.x,但我在系統級別安裝了它。

命令python3 -Vpython -V顯示相同的版本,並且都位於相同的路徑。 為什么最后一個命令有效,但倒數第二個命令無效?

~/proj1$ virtualenv --no-site-packages -p python3 venv
Already using interpreter /usr/bin/python3
Using base prefix '/usr'
New python executable in /home/$USER/proj1/venv/bin/python3
Also creating executable in /home/$USER/proj1/venv/bin/python
Installing setuptools, pkg_resources, pip, wheel...done.
~/proj1$ source venv/bin/activate
(venv) ~/proj1$ which pip
/home/$USER/proj1/venv/bin/pip
(venv) ~/proj1$ pip -V
pip 20.0.2 from /home/$USER/proj1/venv/lib/python3.5/site-packages/pip (python 3.5)
(venv) ~/proj1$ pip install numpy
Collecting numpy
  Using cached numpy-1.18.1-cp35-cp35m-manylinux1_x86_64.whl (19.9 MB)
Installing collected packages: numpy
Successfully installed numpy-1.18.1
(venv) ~/proj1$ python -V
Python 3.5.2
(venv) ~/proj1$ python3 -V
Python 3.5.2
(venv) ~/proj1$ which python
/home/$USER/proj1/venv/bin/python
(venv) ~/proj1$ which python3
/home/$USER/proj1/venv/bin/python3
(venv) ~/proj1$ python -c "import numpy"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: No module named 'numpy'
(venv) ~/proj1$ python3 -c "import numpy"
(venv) ~/proj1$ 

這個問題與numpy本身無關。 相反,發生的事情是別名python='/usr/bin/python3'阻止您的 shell 找到在您的執行路徑中首先出現的python可執行文件(即,具有“ which python ”給出的路徑的可執行文件),這會造成混亂使用您的虛擬環境設置。 因為那個別名,

python -c "import numpy"

被解釋為

/usr/bin/python3 -c "import numpy"

由於您在虛擬環境中安裝了numpy ,因此/usr/bin的系統范圍的 Python 3 安裝在設計上不知道該numpy安裝,因此您會得到ImportError

另一方面,如果你要跑

unalias python
python -c "import numpy"

那么python將被視為/home/$USER/proj1/venv/bin/python ,前提是你已經獲得了/home/$USER/proj1/venv/bin/activate ,當然,事情會像你一樣工作預計。

這里的寓意是“不要使用which ”。 bash (現在幾乎每個人都在使用)有一個內置的命令type ,用於顯示如何解釋命令; 特別是, type -a python在這里會告訴你,這是您的虛擬環境的python ,但實際上別名運行從一個/usr/bin是相同的版本,但沒有安裝相同的程序包(因為當然,虛擬環境的目錄不在其sys.path )。

暫無
暫無

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

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