2016-11-17 54 views
0

我試圖創建一個django項目,使用virtualenvwrapper隔離/沙箱不同的項目。

這裏是我打到目前爲止的命令......

[email protected]:~/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) [email protected]:~/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) [email protected]:~/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) [email protected]:~/path/to/foo_project.foo$ 

不相信我所看到的,我決定運行一些檢查,以(?S)確保我不會瘋...

(foo) [email protected]:~/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) [email protected]:~/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: [email protected] 
License: BSD 
Location: /home/memyself/.virtualenvs/foo/lib/python3.5/site-packages 
Requires: 


(foo) [email protected]:~/path/to/foo_project.foo$ which django-admin.py 
/home/memyself/.virtualenvs/foo/bin/django-admin.py 

我使用一種簡單的規則是這傢伙是誰創造和維護virtualenvwrapper是(是)比我聰明多了 - 但是,不(自動)將新創建的環境添加到路徑中,惡意接近惡意。

開發人員/維護人員很不可能(不可能),這是不可能的 - 這留下唯一可能的解釋是我錯過了一些明顯的事情,並做了一些愚蠢的事情。

SO(pun unintended) - 我做錯了什麼?

爲什麼在使用virtualenvwrapper創建新的virt環境之後,我不能簡單地執行python djan-admin.py startproject xxx

回答

1

你不需要運行python django-admin.py(實際上你不應該),只需運行django-admin.pypython不搜索您的$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

+0

該死! ...你知道,我不相信你,所以我嘗試了你提出的兩個命令,並且都工作了!這是什麼魔法?! )。我在網上搜索了大量的教程,看到一個例子,展示瞭如何使用** virtualenvwrapper創建一個django項目。** - 找不到一個,我不想用環境文件「污染」我的工作空間 - 你保存了那天。你值得擁有一個+1!也謝謝你的詳細解釋...... Doh!這是一個漫長的一天,在4個小時的睡眠..;) –

相關問題