我正在尝试创建一个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
?
答案 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
,并搜索$PATH
。 foo.py
只是一个命令参数,你的shell根本不会查找它。当python
运行时,它会在当前目录中查找foo.py
(并且还接受类似../otherdir/foo.py
的相对路径或/home/someone/foo.py
之类的绝对路径);它完全不关心$PATH
。