MacOS下不同版本Python安装如Numpy等第三方模块的疑问?
我的MacOS里预装了2.6和2.7,后来又自己装了3.4,我今天想在3.4下用Numpy模块,发现没有,试了其他两个版本都自带了这个模块,我记得在win下装的话只要用pip3 install numpy就行,和2.X的差别就是多了个3,于是就试了下果然可以,但我费了老大劲也没看到3.4里有pip,所以产生了以下一些疑问:
- 2.X和3.X好像不是装在一个地方的?具体在哪?
- 怎么去看不同版本都装了哪些模块?
- 我有2.6和2.7两个版本,那要是用pip install到底是装进哪个版本里了?能否特殊化?
- 我这种win下的方法是否正统?还有其他方法吗?
- 我昨天试了个叫virtualenv的东西,对它的理解非常模糊,我不知道大家在平常是否会在这下面编写不同python版本的项目?
Answers
-
不是,Python “加装的模块”具体在
lib/pythonx.y/site-packages
下面,比如:-
常规 Linux 发行版自带的 Python 3.4 第三方模块在:
/usr/lib/python3.4/site-packages/
-
Python 官方源码
make install
出来的/usr/local/bin/python2.7
下的第三方模块在:/usr/local/lib/python2.7/site-packages/
-
OS X 下用 HomeBrew 安装的 Python 2.7 下的第三方模块在:
/usr/local/Cellar/python3/3.4.3/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/
-
常规 Linux 发行版自带的 Python 3.4 第三方模块在:
-
通常可以用不同版本 Python 解释器对应的
pip list
来查看,比如:-
/usr/bin/pip3.4 list
-
/usr/local/bin/pip2.7 list
-
/usr/local/bin/pip3.4 list
另外,
pip freeze
作为更早的一个命令也可以用作查看已安装的包。 -
-
可以通过查看
pip
命令文件的开头第一行,来确定它对应的 Python 解释器:#!/usr/local/bin/python3.4
-
可以吧,也可以下载下来 numpy 源码,用指定 Python 解释器来执行
setup.py
,比如:/usr/local/bin/python2.7 setup.py install
-
会的,洁癖必需品。
virtualenv 会在 用户空间 创建一个文件夹,里面就包含了一个“完整的”Python 运行时环境,比如:
/home/fantix/py3kenv/bin/python /home/fantix/py3kenv/bin/python3 /home/fantix/py3kenv/bin/python3.4 /home/fantix/py3kenv/bin/pip /home/fantix/py3kenv/bin/pip3 /home/fantix/py3kenv/bin/pip3.4 /home/fantix/py3kenv/lib/python3.4/site-packages/...
然后我可以 进入 这个环境:
source ~/py3kenv/bin/activate
随即,
$PATH
的最前面会冠以/home/fantix/py3kenv/bin:
,因此,再执行的比如python
或pip
则都在该虚拟环境中了,所以此时pip install
或者python setup.py install
造成的影响会仅限于/home/fantix/py3kenv/
这个文件夹中,而不会对系统环境(/usr/lib/python3.4/site-packages
)有任何影响,也不需要 root 权限,而且在使用完毕不再需要它之后,可以一删了之。