Virtualenv应该使用系统包

2024-04-30 05:46:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我创建了一个带有--no site packages选项的virtualenv环境。在激活virtualenv之后,我注意到在“python”提示符下导入psycopg2将导入我拥有的过期系统库,但是在“python2.6”提示符下导入它会将我安装的库的更新版本导入到virtualenv中。在

为什么会这样?当我激活了virtualenv时,如何才能只使用virtualenv包?在

如果重要的话,我在OSX上。在

根据Jeff的评论进行编辑:

在我的virtualenv/bin目录中有“python”和“python2.6”可执行文件python2.6”是指向“python”的符号链接,“python”是二进制文件。在

(ice_development)[jacob@Beagle:~] $ ls -l Virtualenv/ice_development/bin/
total 264
-rw-r--r--  1 jacob  staff   2086 Sep  8 18:13 activate

 .....

-rwxr-xr-x  1 jacob  staff  50720 Sep  8 18:13 python
lrwxr-xr-x  1 jacob  staff      6 Sep  8 18:13 python2.6 -> python

激活ENV后,“whichpython”和“whichpython2.6”都指向ENV目录。在

^{pr2}$

此外,在命令行使用可执行文件后,提示是相同的。在

(ice_development)[jacob@Beagle:~] $ python2.6
Python 2.6.1 (r261:67515, Feb 11 2010, 00:51:29) 
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import psycopg2
>>> psycopg2.__version__
'2.2.2 (dt dec ext pq3)'
>>> quit()

(ice_development)[jacob@Beagle:~] $ python
Python 2.6.1 (r261:67515, Feb 11 2010, 00:51:29) 
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import psycopg2
>>> psycopg2.__version__
'2.0.13 (dt dec ext pq3)'
>>> quit()

~/ENV/lib/python2.6/site-packages目录包含psycopg2(2.2.2)的新版本:

(ice_development)[jacob@Beagle:~] $ ls Virtualenv/ice_development/lib/python2.6/site-   packages/
Twisted-10.1.0-py2.6-macosx-10.6-universal.egg       setuptools-0.6c11-py2.6.egg
easy-install.pth                                     setuptools.pth
pip-0.7.2-py2.6.egg                                  txpostgres-0.3.0-py2.6.egg
psycopg2                                             zope.interface-3.6.1-py2.6-macosx-    10.6-universal.egg
psycopg2-2.2.2-py2.6.egg-info

但是,在不同的提示下导入psycopg2将导入两个不同的版本。在


Tags: 版本目录envvirtualenveggpackagessitepsycopg2
2条回答

感谢xnine的响应,我有了检查我的.bashrc文件的想法。我把这些台词注释掉了:

export PATH=/usr/bin/python2.6:$PATH
alias python="/usr/bin/python2.6"
alias pdb='python -m pdb'

他们中的一个成功了。在

我一直在试图复制你的问题,但没有成功。在

激活virtualenv会给我留下如下提示:

jeff@DeepThought:~$ source ~/ENV/bin/activate
(ENV)jeff@DeepThought:~$ 

这主要是将~/ENV/bin添加到搜索路径的前面,这样当我键入“python”时,我在该bin中安装的版本会首先出现。在我的例子中,我在全球安装了2.6,虚拟安装了2.7。在

^{pr2}$

我对您的案例感到奇怪的是,您说您在虚拟环境中有更新的库,但您只能使用python2.6访问它们。除非您是自己创建的,~/ENV/bin甚至不应该有python2.6可执行文件。如果您激活了virtualenv,那么键入python应该会将您带到virtualenvpythonshell,而输入python2.6将带您进入全局pythonshell。如果是这样的话,你应该看到与你所说的相反的情况。在

我要做的第一件事是检查运行python和python2.6时执行的操作:

(ENV)jeff@DeepThought:~$ which python
/home/jeff/ENV/bin/python
(ENV)jeff@DeepThought:~$ which python2.6
/usr/bin/python2.6

这看起来像我期望的那样。你的长什么样?如果您的文件也是这样的,那么您可能需要进入~/ENV/lib/python2.6/site-packages/删除给您带来麻烦的文件,用更新的文件替换它们。在

编辑:别名优先于搜索路径:

jeff@DeepThought:~$ echo $PATH
/home/jeff/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
jeff@DeepThought:~$ cat > /home/jeff/bin/hello.sh
#!/bin/bash
echo "hello world"
jeff@DeepThought:~$ chmod +x ~/bin/hello.sh 
jeff@DeepThought:~$ hello.sh
hello world
jeff@DeepThought:~$ which hello.sh
/home/jeff/bin/hello.sh
jeff@DeepThought:~$ alias hello.sh=/usr/bin/python
jeff@DeepThought:~$ which hello.sh
/home/jeff/bin/hello.sh
jeff@DeepThought:~$ hello.sh
Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41) 
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 

相关问题 更多 >