【问题标题】:Wrong Django version returned in virtualenvvirtualenv 中返回了错误的 Django 版本
【发布时间】:2015-10-05 22:13:57
【问题描述】:

我在运行 OS X !0.10 Yosemite 的 Mac 上。 Python 和 Django 的默认版本是 2.7 和 1.5。我想设置一个具有 Django 1.8 的 virtualenv,所以我正在执行以下操作:

$ virtualenv --no-site-packages django18env
New python executable in django18env/bin/python2.7
Also creating executable in django18env/bin/python
Installing setuptools, pip...done.
$ source django18env/bin/activate
(django18env)$ 

然后我正在安装 Django 1.8

(django18env)$ sudo pip install django==1.8
Password:
Downloading/unpacking django==1.8
  Downloading Django-1.8-py2.py3-none-any.whl (6.2MB): 6.2MB downloaded
Installing collected packages: django
Successfully installed django
Cleaning up...
(django18env)$  

运行后,我在 django18env/lib/python2.7/site-packages/django 下安装了 Django

如果我查看该目录中的 __init__.py 文件,它会显示:

从 django.utils.version 导入 get_version VERSION = (1, 8, 0, 'final', 0)

所以看起来正确的版本安装在 virtualenv 目录中。但是,如果我使用 django-admin --version 我得到:

(django18env)$ django-admin version
1.5.4

我也尝试过在虚拟环境中启动 python 并以这种方式获取 django 版本:

(django18env)$ python
Python 2.7.8 (default, Jul 29 2014, 21:50:48) 
[GCC 4.2.1 Compatible Apple LLVM 5.1 (clang-503.0.40)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>> django.get_version()
'1.5.4'
>>> 

关于为什么在 vertualenv 中安装 1.8 时它似乎仍指向 1.5 的任何想法?

我在这里阅读了各种其他主题,但无法让版本指向 1.8

非常感谢任何帮助

谢谢

【问题讨论】:

  • 当你在你的 virtualenv 中尝试输入 which python 你会得到什么?
  • 嗨,我得到:/Library/WebServer/Documents/vhosts/django/django18env/bin/python 指向 virtualenv 中的版本
  • 尝试直接在virtualenv中调用python。

标签: python django virtualenv


【解决方案1】:

不要在 virtualenv 上使用 sudo。 vitualenv 的重点是,不是在系统范围内安装软件,而是在该环境中安装软件。但无论在 virtualenv 内部还是外部,如果您使用 sudo,它都会将软件全局安装到您的系统中。

ziya@ziya:~/Desktop/coursera/python/lorem$ virtualenv ipsum
New python executable in ipsum/bin/python2.6
Also creating executable in ipsum/bin/python
Installing setuptools, pip...done.
#created a virtualenv
ziya@ziya:~/Desktop/coursera/python/lorem$ cd ipsum/
ziya@ziya:~/Desktop/coursera/python/lorem/ipsum$ . bin/activate
# will now install package with sudo 
(ipsum)ziya@ziya:~/Desktop/coursera/python/lorem/ipsum$ sudo pip install sudokulib # i don't know what it is, just installing.
[sudo] password for ziya: 
.....
Collecting sudokulib
/usr/local/lib/python2.7/dist-packages # attention to this path!
...
Successfully installed sudokulib-0.6a0
(ipsum)ziya@ziya:~/Desktop/coursera/python/lorem/ipsum$ python
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.
>>> import sudokulib # import the newly installed module
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named sudokulib
>>> exit()
(ipsum)ziya@ziya:~/Desktop/coursera/python/lorem/ipsum$ deactivate
#deactivating virtualenv and starting default python
ziya@ziya:~/Desktop/coursera/python/lorem/ipsum$ python
Python 2.7.3 (default, Dec 18 2014, 19:10:20) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sudokulib
>>> sudokulib.__version__
'0.6a' #here it is!
>>> exit()
ziya@ziya:~/Desktop/coursera/python/lorem/ipsum$ . bin/activate
(ipsum)ziya@ziya:~/Desktop/coursera/python/lorem/ipsum$ pip install sudokulib #now installing the same module without sudo
Collecting sudokulib
  Downloading sudokulib-0.6a.tar.gz
    /home/ziya/Desktop/coursera/python/lorem/ipsum/lib/python2.6/site-packages
.... 
Successfully installed sudokulib-0.6a0
(ipsum)ziya@ziya:~/Desktop/coursera/python/lorem/ipsum$ python
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.
>>> import sudokulib
>>> sudokulib.__version__
'0.6a' #seems ok now :)
>>> 

【讨论】:

  • 我试过了。如果我从 virtualenv 运行 pip install django 它说它可以找到现有版本(系统范围 1.5)并且不安装它。如果我尝试 pip install django==1.8 那么它确实将 Django 版本 1.8 添加到 virtualenv 中的 Python 站点包中,但是当我查找版本时仍然使用旧的 1.5
【解决方案2】:

我发现了问题。正如我上面所说,Django 1.8 被安装在 virtualenv 中,但 Python 没有使用它。在 vitualenv 中,我启动了 Python,然后:

>>>import django
>>>django.__file__

这表明 Django 是从以下位置导入的: /usr/local/Cellar/python/2.7.8/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages

当我查看我的 .bash_profile 时,有一行:

export PYTHONPATH=$PYTHONPATH:/usr/local/Cellar/python/2.7.8/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages

不确定它是如何/何时进入的,但我将其注释掉,重新启动 shell,我现在在我的 virtualenv 中获得 Django1.8 和在 virtualenv 之外的旧(默认)版本 1.5。

感谢您的帮助和建议

【讨论】:

    猜你喜欢
    • 2020-07-22
    • 2015-10-07
    • 2023-03-12
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    • 2016-01-24
    • 2018-08-07
    • 1970-01-01
    相关资源
    最近更新 更多