为什么 virtualenvwrapper 没有将我的环境位置添加到我的 $PATH
Why is virtualenvwrapper not adding my environment location to my $PATH
我正在尝试创建一个 django 项目,将 virtualenvwrapper 用于 isolate/sandbox 个不同的项目。
这是我到目前为止输入的命令...
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 环境中安装了 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 的人比我聪明得多 - 但是,没有(自动)将新创建的环境添加到路径中,reeks近乎恶意的无能。
developer/mainteners 不太可能(不,不可能)如此无能 - 这留下唯一可能的解释是我遗漏了一些明显的东西并做了一些愚蠢的事情。
SO(无意的双关语)- 我做错了什么?!
为什么我不能在使用 virtualenvwrapper 创建新的 virt 环境后直接执行 python djan-admin.py startproject xxx
?
您不需要 运行 python django-admin.py
(事实上您不应该),只需 运行 django-admin.py
。 python
没有搜索您的 $PATH
;它将在当前目录中查找文件。只要 django-admin.py
设置了它的执行位,您就可以将它用作命令而无需显式 运行ning python
.
它也将自身安装为 django-admin
,因此您可以使命令行更简洁:
django-admin startproject mysite
您不需要 .py
扩展。
根本原因是 virtualenv 修改了 $PATH
,这是您的 shell(bash 或其他)用来定位要执行的命令的内容。当你运行python foo.py
时,命令是python
,搜索$PATH
。 foo.py
只是一个命令参数,而您的 shell 根本不会寻找它。当 python
运行s 时,它会在当前目录中查找 foo.py
(并且还接受像 ../otherdir/foo.py
这样的相对路径或像 /home/someone/foo.py
这样的绝对路径);它根本不关心 $PATH
。
我正在尝试创建一个 django 项目,将 virtualenvwrapper 用于 isolate/sandbox 个不同的项目。
这是我到目前为止输入的命令...
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 环境中安装了 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 的人比我聪明得多 - 但是,没有(自动)将新创建的环境添加到路径中,reeks近乎恶意的无能。
developer/mainteners 不太可能(不,不可能)如此无能 - 这留下唯一可能的解释是我遗漏了一些明显的东西并做了一些愚蠢的事情。
SO(无意的双关语)- 我做错了什么?!
为什么我不能在使用 virtualenvwrapper 创建新的 virt 环境后直接执行 python djan-admin.py startproject xxx
?
您不需要 运行 python django-admin.py
(事实上您不应该),只需 运行 django-admin.py
。 python
没有搜索您的 $PATH
;它将在当前目录中查找文件。只要 django-admin.py
设置了它的执行位,您就可以将它用作命令而无需显式 运行ning python
.
它也将自身安装为 django-admin
,因此您可以使命令行更简洁:
django-admin startproject mysite
您不需要 .py
扩展。
根本原因是 virtualenv 修改了 $PATH
,这是您的 shell(bash 或其他)用来定位要执行的命令的内容。当你运行python foo.py
时,命令是python
,搜索$PATH
。 foo.py
只是一个命令参数,而您的 shell 根本不会寻找它。当 python
运行s 时,它会在当前目录中查找 foo.py
(并且还接受像 ../otherdir/foo.py
这样的相对路径或像 /home/someone/foo.py
这样的绝对路径);它根本不关心 $PATH
。