为什么virtualenvwrapper没有将我的环境位置添加到$ PATH

时间:2016-11-17 17:07:07

标签: python linux django virtualenv virtualenvwrapper

我正在尝试创建一个django项目,使用virtualenvwrapper隔离/沙箱不同的项目。

以下是我目前输入的命令......

memyself@somebox:~/path/to/foo_project$ mkvirtualenv foo
Using base prefix '/usr'
New python executable in /home/memyself/.virtualenvs/foo/bin/python3
Also creating executable in /home/memyself/.virtualenvs/foo/bin/python
Installing setuptools, pip, wheel...done.
virtualenvwrapper.user_scripts creating /home/memyself/.virtualenvs/foo/bin/predeactivate
virtualenvwrapper.user_scripts creating /home/memyself/.virtualenvs/foo/bin/postdeactivate
virtualenvwrapper.user_scripts creating /home/memyself/.virtualenvs/foo/bin/preactivate
virtualenvwrapper.user_scripts creating /home/memyself/.virtualenvs/foo/bin/postactivate
virtualenvwrapper.user_scripts creating /home/memyself/.virtualenvs/foo/bin/get_env_details

然后我在foo env中安装了django:

(foo) memyself@somebox:~/path/to/foo_project$ pip install django
Collecting django
  Using cached Django-1.10.3-py2.py3-none-any.whl
Installing collected packages: django
Successfully installed django-1.10.3

然后我通过输入以下命令继续尝试创建django网站:

(foo) memyself@somebox:~/path/to/foo_project.foo$ python django-admin.py startproject mysite
python: can't open file 'django-admin.py': [Errno 2] No such file or directory
(foo) memyself@somebox:~/path/to/foo_project.foo$ 

不相信我所看到的,我决定进行一些检查,以确保我不会生气......

(foo) memyself@somebox:~/path/to/foo_project.foo$ pip list --format=legacy
Django (1.10.3)
pip (9.0.1)
setuptools (28.8.0)
wheel (0.29.0)


(foo) memyself@somebox:~/path/to/foo_project.foo$ pip show django
Name: Django
Version: 1.10.3
Summary: A high-level Python Web framework that encourages rapid development and clean, pragmatic design.
Home-page: http://www.djangoproject.com/
Author: Django Software Foundation
Author-email: foundation@djangoproject.com
License: BSD
Location: /home/memyself/.virtualenvs/foo/lib/python3.5/site-packages
Requires: 


(foo) memyself@somebox:~/path/to/foo_project.foo$ which django-admin.py
/home/memyself/.virtualenvs/foo/bin/django-admin.py

我正在使用一个简单的启发式方法,创建和维护virtualenvwrapper的人(比那些人)比我更聪明 - 但是,不是(自动地)将新创建的环境添加到路径中,无能为力接近恶意。

开发人员/维护人员不太可能(不,不可能)是不称职的 - 这留下了唯一可能的解释,就是我错过了一些显而易见的事情并做了一些愚蠢的事情。

SO(双关语意外) - 我做错了什么?!

为什么我不能在使用virtualenvwrapper创建新的virt环境后简单地执行python djan-admin.py startproject xxx

1 个答案:

答案 0 :(得分:1)

您无需运行python django-admin.py(事实上您不应该),只需运行django-admin.py即可。 python未搜索到您的$PATH;它将在当前目录中查找该文件。只要django-admin.py设置了执行位,就可以将其用作命令而不显式运行python

它还将自己安装为django-admin,因此您可以使命令行更清洁:

django-admin startproject mysite

您不需要.py扩展名。

根本原因是virtualenv修改了$PATH,这是你的shell(bash或其他)用来定位执行命令的东西。运行python foo.py时,命令为python,并搜索$PATHfoo.py只是一个命令参数,你的shell根本不会查找它。当python运行时,它会在当前目录中查找foo.py(并且还接受类似../otherdir/foo.py的相对路径或/home/someone/foo.py之类的绝对路径);它完全不关心$PATH