无法将 PIL 导入 Python Shell,但可以导入终端
Cannot import PIL into Python Shell, but can into Terminal
我已经在终端中使用 sudo pip install Pillow
在 Macintosh 上安装了 Pillow。我知道它已安装,因为每当我在终端 window 中输入 python
后 运行 import PIL
,这是我的输出:
终端输出:
Python 3.5.1 |Anaconda 2.4.1 (x86_64)| (default, Dec 7 2015, 11:24:55)
[GCC 4.2.1 (Apple Inc. build 5577)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import PIL
>>>
然而,奇怪的是,在 Python Shell 中,当我做同样的事情时,我得到这个:
Python Shell(空闲)输出:
Python 3.5.1 (v3.5.1:37a07cee5969, Dec 5 2015, 21:12:44)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "copyright", "credits" or "license()" for more information.
>>> import PIL
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
import PIL
ImportError: No module named 'PIL'
为什么我可以在 Macintosh 终端中导入 Python 成像库 (PIL),但不能在 Python Shell 中导入,如何实现我可以解决这个问题吗?
你不应该使用 sudo 来安装 python 模块。
当你安装了多个版本的 python 时,每个版本都有自己的名称、pip 和 IDLE。您在命令行发出的命令决定了将启动哪个 python。您安装的 python 版本之一将链接到名称 python
,而其他版本的名称将包含该版本,例如python3.5
.
为了弄清楚你正在启动哪个版本的 python,你可以用它的版本名称启动 python,python3.5,用它的版本名称执行 pip,pip3.5 ,并以其版本名称 idle3.5.
启动 IDLE
这里有一些命令可以帮助您找出 pip install Pillow
正在安装模块的位置:
~$ which pip
/usr/local/bin/pip
~$ cd /usr/local/bin
/usr/local/bin$ ls -al pip*
lrwxrwxr-x 1 root admin 65 Apr 10 2015 pip ->
../../../Library/Frameworks/Python.framework/Versions/2.7/bin/pip
lrwxrwxr-x 1 root admin 66 Apr 10 2015 pip2 ->
../../../Library/Frameworks/Python.framework/Versions/2.7/bin/pip2
lrwxrwxr-x 1 root admin 68 Apr 10 2015 pip2.7 ->
../../../Library/Frameworks/Python.framework/Versions/2.7/bin/pip2.7
lrwxrwxr-x 1 root admin 66 Apr 7 2015 pip3 ->
../../../Library/Frameworks/Python.framework/Versions/3.4/bin/pip3
lrwxrwxr-x 1 root admin 68 Apr 7 2015 pip3.4 ->
../../../Library/Frameworks/Python.framework/Versions/3.4/bin/pip3.4
语法pip ->
表示名称pip链接到箭头后的文件。您可以看到这些名称 指向 的位置,因此 pip 正在将模块安装到哪个 python 中。
===
你安装了 Anaconda,Anaconda 劫持了名字 python
和 pip
供自己使用,所以你会看到这样的东西:
~$ which python
/Users/7stud/anaconda/bin/python
~$ which pip
/Users/7stud/anaconda/bin/pip
Anaconda 没有劫持名称idle
,所以idle指向另一个python安装:
~$ which idle
/usr/local/bin/idle
~$ cd /usr/local/bin
/usr/local/bin$ ls -al idle*
lrwxr-xr-x 1 root wheel 66 Apr 10 2015 idle ->
../../../Library/Frameworks/Python.framework/Versions/2.7/bin/idle
lrwxr-xr-x 1 root wheel 67 Apr 10 2015 idle2 ->
../../../Library/Frameworks/Python.framework/Versions/2.7/bin/idle2
lrwxr-xr-x 1 root wheel 69 Apr 10 2015 idle2.7 ->
../../../Library/Frameworks/Python.framework/Versions/2.7/bin/idle2.7
lrwxr-xr-x 1 root wheel 67 Apr 7 2015 idle3 ->
../../../Library/Frameworks/Python.framework/Versions/3.4/bin/idle3
lrwxr-xr-x 1 root wheel 69 Apr 7 2015 idle3.4 ->
../../../Library/Frameworks/Python.framework/Versions/3.4/bin/idle3.4
Anaconda 通过在文件末尾添加以下行来劫持名称 python 和 pip ~/.bash_profile
:
export PATH="/Users/7stud/anaconda/bin:$PATH"
当您在命令行上发出命令时,终端 window 在您的 PATH 环境变量中指定的目录中按顺序搜索该命令。因为 Anaconda 路径在 PATH 变量的前面,所以首先在 Anaconda 目录中搜索命令 python
和 pip
和 idle
。在该目录中找到 python
命令:
~$ which python
/Users/7stud/anaconda/bin/python
~$ cd /Users/7stud/anaconda/bin/
~/anaconda/bin$ ls -al python*
lrwxr-xr-x 1 7stud staff 9 Dec 22 05:29 python -> python3.5
-rwxrwxr-x 1 7stud staff 272 Dec 22 05:29 python-argcomplete-check-easy-install-script
-rwxrwxr-x 1 7stud staff 129 Dec 22 05:29 python.app
lrwxr-xr-x 1 7stud staff 9 Dec 22 05:29 python3 -> python3.5
lrwxr-xr-x 1 7stud staff 17 Dec 22 05:29 python3-config -> python3.5m-config
-rwxrwxr-x 1 7stud staff 9096 Dec 7 10:27 python3.5
(除了名字python,还可以看到名字python3和python3.5。因为python和python3都指向 python3.5,命令 python、python3 和 python3.5 都执行相同的 python.)
Anaconda目录下也有pip
命令:
$ which pip
/Users/7stud/anaconda/bin/pip
$ cd /Users/7stud/anaconda/bin
~/anaconda/bin$ ls -al pip*
-rwxrwxr-x 1 7stud staff 125 Dec 22 05:29 pip
pip 只有一个名称。
但是,在 Anaconda 目录中找不到 idle
命令:
~$ which idle
/usr/local/bin/idle
双重检查:
~$ cd ~/anaconda/bin
~/anaconda/bin$ ls -al idle*
lrwxr-xr-x 1 7stud staff 7 Dec 22 05:29 idle3 -> idle3.5
-rwxrwxr-x 1 7stud staff 108 Dec 22 05:29 idle3.5
名称 idle
与 idle3
或 idle3.5
不同,因此在 PATH 变量的其他目录中继续搜索空闲。如果你想启动 Anaconda 空闲,你可以使用名称 idle3
或 idle3.5
.
因为我讨厌 Anaconda 劫持所有这些 python 名称的方式,这会阻止我在不使用 Anaconda 时将这些名称用于 运行 我的其他 python 版本我在 ~/.bash_profile:
中注释掉以下行
# export PATH="/Users/7stud/anaconda/bin:$PATH"
要使您在 ~./bash_profile
中所做的更改生效,您需要关闭终端 window 并启动新的 window,或者发出命令:
$ source ~/.bash_profile
另一种防止 Anaconda 劫持所有这些 python 名称的方法是执行以下操作:
~/anaconda/bin$ mv python xpython #change the name to xpython
~/anaconda/bin$ mv python3 xpython3
~/anaconda/bin$ cp python3.5 pyana #copy to a new name
~/anaconda/bin$ mv python3.5 xpython3.5
这会以假名保留所有原始名称(如果出现问题,您可以将 x-names 改回原始名称),它还会为您的 Anaconda [=] 创建名称 pyana
90=]。现在名称 python、python3 等仍将指向与安装 Anaconda 之前相同的 python 版本:
~/anaconda/bin$ which python
/usr/local/bin/python
~/anaconda/bin$ which python3
/usr/local/bin/python3
~/anaconda/bin$ which pyana
/Users/7stud/anaconda/bin/pyana
~/anaconda/bin$ pyana --version
Python 3.5.1 :: Anaconda 2.4.1 (x86_64)
~/anaconda/bin$ pyana
Python 3.5.1 |Anaconda 2.4.1 (x86_64)| (default, Dec 7 2015, 11:24:55)
[GCC 4.2.1 (Apple Inc. build 5577)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
编辑:一段时间后,我发现在 Anaconda 的目录中也找到了 openssl,所以当我不使用 Anaconda 时,我又回去注释掉 .bash_profile
中的行——Anaconda 只是劫持了太多的名字。
我已经在终端中使用 sudo pip install Pillow
在 Macintosh 上安装了 Pillow。我知道它已安装,因为每当我在终端 window 中输入 python
后 运行 import PIL
,这是我的输出:
终端输出:
Python 3.5.1 |Anaconda 2.4.1 (x86_64)| (default, Dec 7 2015, 11:24:55)
[GCC 4.2.1 (Apple Inc. build 5577)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import PIL
>>>
然而,奇怪的是,在 Python Shell 中,当我做同样的事情时,我得到这个:
Python Shell(空闲)输出:
Python 3.5.1 (v3.5.1:37a07cee5969, Dec 5 2015, 21:12:44)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "copyright", "credits" or "license()" for more information.
>>> import PIL
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
import PIL
ImportError: No module named 'PIL'
为什么我可以在 Macintosh 终端中导入 Python 成像库 (PIL),但不能在 Python Shell 中导入,如何实现我可以解决这个问题吗?
你不应该使用 sudo 来安装 python 模块。
当你安装了多个版本的 python 时,每个版本都有自己的名称、pip 和 IDLE。您在命令行发出的命令决定了将启动哪个 python。您安装的 python 版本之一将链接到名称 python
,而其他版本的名称将包含该版本,例如python3.5
.
为了弄清楚你正在启动哪个版本的 python,你可以用它的版本名称启动 python,python3.5,用它的版本名称执行 pip,pip3.5 ,并以其版本名称 idle3.5.
启动 IDLE这里有一些命令可以帮助您找出 pip install Pillow
正在安装模块的位置:
~$ which pip
/usr/local/bin/pip
~$ cd /usr/local/bin
/usr/local/bin$ ls -al pip*
lrwxrwxr-x 1 root admin 65 Apr 10 2015 pip ->
../../../Library/Frameworks/Python.framework/Versions/2.7/bin/pip
lrwxrwxr-x 1 root admin 66 Apr 10 2015 pip2 ->
../../../Library/Frameworks/Python.framework/Versions/2.7/bin/pip2
lrwxrwxr-x 1 root admin 68 Apr 10 2015 pip2.7 ->
../../../Library/Frameworks/Python.framework/Versions/2.7/bin/pip2.7
lrwxrwxr-x 1 root admin 66 Apr 7 2015 pip3 ->
../../../Library/Frameworks/Python.framework/Versions/3.4/bin/pip3
lrwxrwxr-x 1 root admin 68 Apr 7 2015 pip3.4 ->
../../../Library/Frameworks/Python.framework/Versions/3.4/bin/pip3.4
语法pip ->
表示名称pip链接到箭头后的文件。您可以看到这些名称 指向 的位置,因此 pip 正在将模块安装到哪个 python 中。
===
你安装了 Anaconda,Anaconda 劫持了名字 python
和 pip
供自己使用,所以你会看到这样的东西:
~$ which python
/Users/7stud/anaconda/bin/python
~$ which pip
/Users/7stud/anaconda/bin/pip
Anaconda 没有劫持名称idle
,所以idle指向另一个python安装:
~$ which idle
/usr/local/bin/idle
~$ cd /usr/local/bin
/usr/local/bin$ ls -al idle*
lrwxr-xr-x 1 root wheel 66 Apr 10 2015 idle ->
../../../Library/Frameworks/Python.framework/Versions/2.7/bin/idle
lrwxr-xr-x 1 root wheel 67 Apr 10 2015 idle2 ->
../../../Library/Frameworks/Python.framework/Versions/2.7/bin/idle2
lrwxr-xr-x 1 root wheel 69 Apr 10 2015 idle2.7 ->
../../../Library/Frameworks/Python.framework/Versions/2.7/bin/idle2.7
lrwxr-xr-x 1 root wheel 67 Apr 7 2015 idle3 ->
../../../Library/Frameworks/Python.framework/Versions/3.4/bin/idle3
lrwxr-xr-x 1 root wheel 69 Apr 7 2015 idle3.4 ->
../../../Library/Frameworks/Python.framework/Versions/3.4/bin/idle3.4
Anaconda 通过在文件末尾添加以下行来劫持名称 python 和 pip ~/.bash_profile
:
export PATH="/Users/7stud/anaconda/bin:$PATH"
当您在命令行上发出命令时,终端 window 在您的 PATH 环境变量中指定的目录中按顺序搜索该命令。因为 Anaconda 路径在 PATH 变量的前面,所以首先在 Anaconda 目录中搜索命令 python
和 pip
和 idle
。在该目录中找到 python
命令:
~$ which python
/Users/7stud/anaconda/bin/python
~$ cd /Users/7stud/anaconda/bin/
~/anaconda/bin$ ls -al python*
lrwxr-xr-x 1 7stud staff 9 Dec 22 05:29 python -> python3.5
-rwxrwxr-x 1 7stud staff 272 Dec 22 05:29 python-argcomplete-check-easy-install-script
-rwxrwxr-x 1 7stud staff 129 Dec 22 05:29 python.app
lrwxr-xr-x 1 7stud staff 9 Dec 22 05:29 python3 -> python3.5
lrwxr-xr-x 1 7stud staff 17 Dec 22 05:29 python3-config -> python3.5m-config
-rwxrwxr-x 1 7stud staff 9096 Dec 7 10:27 python3.5
(除了名字python,还可以看到名字python3和python3.5。因为python和python3都指向 python3.5,命令 python、python3 和 python3.5 都执行相同的 python.)
Anaconda目录下也有pip
命令:
$ which pip
/Users/7stud/anaconda/bin/pip
$ cd /Users/7stud/anaconda/bin
~/anaconda/bin$ ls -al pip*
-rwxrwxr-x 1 7stud staff 125 Dec 22 05:29 pip
pip 只有一个名称。
但是,在 Anaconda 目录中找不到 idle
命令:
~$ which idle
/usr/local/bin/idle
双重检查:
~$ cd ~/anaconda/bin
~/anaconda/bin$ ls -al idle*
lrwxr-xr-x 1 7stud staff 7 Dec 22 05:29 idle3 -> idle3.5
-rwxrwxr-x 1 7stud staff 108 Dec 22 05:29 idle3.5
名称 idle
与 idle3
或 idle3.5
不同,因此在 PATH 变量的其他目录中继续搜索空闲。如果你想启动 Anaconda 空闲,你可以使用名称 idle3
或 idle3.5
.
因为我讨厌 Anaconda 劫持所有这些 python 名称的方式,这会阻止我在不使用 Anaconda 时将这些名称用于 运行 我的其他 python 版本我在 ~/.bash_profile:
中注释掉以下行# export PATH="/Users/7stud/anaconda/bin:$PATH"
要使您在 ~./bash_profile
中所做的更改生效,您需要关闭终端 window 并启动新的 window,或者发出命令:
$ source ~/.bash_profile
另一种防止 Anaconda 劫持所有这些 python 名称的方法是执行以下操作:
~/anaconda/bin$ mv python xpython #change the name to xpython
~/anaconda/bin$ mv python3 xpython3
~/anaconda/bin$ cp python3.5 pyana #copy to a new name
~/anaconda/bin$ mv python3.5 xpython3.5
这会以假名保留所有原始名称(如果出现问题,您可以将 x-names 改回原始名称),它还会为您的 Anaconda [=] 创建名称 pyana
90=]。现在名称 python、python3 等仍将指向与安装 Anaconda 之前相同的 python 版本:
~/anaconda/bin$ which python
/usr/local/bin/python
~/anaconda/bin$ which python3
/usr/local/bin/python3
~/anaconda/bin$ which pyana
/Users/7stud/anaconda/bin/pyana
~/anaconda/bin$ pyana --version
Python 3.5.1 :: Anaconda 2.4.1 (x86_64)
~/anaconda/bin$ pyana
Python 3.5.1 |Anaconda 2.4.1 (x86_64)| (default, Dec 7 2015, 11:24:55)
[GCC 4.2.1 (Apple Inc. build 5577)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
编辑:一段时间后,我发现在 Anaconda 的目录中也找到了 openssl,所以当我不使用 Anaconda 时,我又回去注释掉 .bash_profile
中的行——Anaconda 只是劫持了太多的名字。