2011-12-31 34 views
11

有在Windows 7的virtualenv在Windows 7上的回報Asse田

用的virtualenv麻煩我跑:

virtualenv _testenv 

它返回:

Traceback (most recent call last): 
    File "C:\Python27\Scripts\virtualenv-script.py", line 9, in <module> 
    load_entry_point('virtualenv==1.5.2', 'console_scripts', 'virtualenv')() 
    File "C:\Python27\lib\site-packages\virtualenv.py", line 558, in main 
    prompt=options.prompt) 
    File "C:\Python27\lib\site-packages\virtualenv.py", line 647, in create_environment 
    site_packages=site_packages, clear=clear)) 
    File "C:\Python27\lib\site-packages\virtualenv.py", line 771, in install_python 
    copy_required_modules(home_dir) 
    File "C:\Python27\lib\site-packages\virtualenv.py", line 725, in copy_required_modules 
    dst_filename = change_prefix(filename, dst_prefix) 
    File "C:\Python27\lib\site-packages\virtualenv.py", line 710, in change_prefix 
    (filename, prefixes) 
AssertionError: Filename c:\Python27\Lib\os.py does not start with any of these prefixes: ['C:\\Python27'] 

我有以下環境變量:

PYTHONHOME=C:\Python27 
PYTHONPATH=c:\Python27;c:\Python27\Lib 
PYTHONSTARTUP=C:\Users\Larry\.pythonrc 
PATH=%PYTHONHOME%\;%PYTHONHOME%\Scripts;etc 

安裝ED的ActiveState的Python:

ActivePython 2.7.2.5 (ActiveState Software Inc.) based on 
Python 2.7.2 (default, Jun 24 2011, 12:21:10) [MSC v.1500 32 bit (Intel)] on win32 

我更新了PYTHONPATH = C:\ Python27; C:\ Python27 \庫 仍在尋找一種解決方案,我發現,除去應用程序數據/ Python的*。重新安裝Python和現在有一個不同的錯誤:

C:\xbz>virtualenv _t 
PYTHONHOME is set. You *must* activate the virtualenv before using it 
Overwriting _t\Lib\site.py with new content 
New python executable in _t\Scripts\python2.7.exe 
Not overwriting existing python script _t\Scripts\python.exe (you must use _t\Scripts\python2.7.exe) 
Overwriting _t\Lib\distutils\__init__.py with new content 
Installing setuptools.............. 
    Complete output from command C:\xbz\_t\Scripts\python2.7.exe -c "#!python 
\"\"\"Bootstrap setuptoo... 


" --always-copy -U setuptools: 
    Traceback (most recent call last): 
    File "<string>", line 278, in <module> 
    File "<string>", line 210, in main 
    File "<string>", line 132, in download_setuptools 
    File "C:\Python27\Lib\urllib2.py", line 94, in <module> 
    import httplib 
    File "C:\Python27\Lib\httplib.py", line 71, in <module> 
    import socket 
    File "C:\Python27\Lib\socket.py", line 47, in <module> 
    import _socket 
ImportError: No module named _socket 
---------------------------------------- 
...Installing setuptools...done. 
Traceback (most recent call last): 
    File "C:\Python27\Scripts\virtualenv-script.py", line 9, in <module> 
    load_entry_point('virtualenv==1.5.2', 'console_scripts', 'virtualenv')() 
    File "C:\Python27\lib\site-packages\virtualenv.py", line 558, in main 
    prompt=options.prompt) 
    File "C:\Python27\lib\site-packages\virtualenv.py", line 654, in create_environment 
    install_setuptools(py_executable, unzip=unzip_setuptools) 
    File "C:\Python27\lib\site-packages\virtualenv.py", line 384, in install_setuptools 
    _install_req(py_executable, unzip) 
    File "C:\Python27\lib\site-packages\virtualenv.py", line 360, in _install_req 
    cwd=cwd) 
    File "C:\Python27\lib\site-packages\virtualenv.py", line 624, in call_subprocess 
    % (cmd_desc, proc.returncode)) 
OSError: Command C:\xbz\_t\Scripts\python2.7.exe -c "#!python 
\"\"\"Bootstrap setuptoo... 




" --always-copy -U setuptools failed with error code 1 

我砍死庫/ socket.py並插入:

import sys 
sys.path = ['', 'C:\\Python27\\lib\\site-packages\\dotcloud-0.3.1-py2.7.egg', 'C:\\Python27\\lib\\site-packages\\dotcloud.cli-0.3.1-py2.7.egg', 'C:\\Python27\\lib\\site-packages\\flask-0.7dev_20110622-py2.7.egg', 'C:\\Python27\\lib\\site-packages\\werkzeug-0.6.2-py2.7.egg', 'C:\\Python27\\lib\\site-packages\\gunicorn-0.12.2-py2.7.egg', 'C:\\Python27\\lib\\site-packages\\wtforms-0.6.3-py2.7.egg', 'C:\\Python27\\lib\\site-packages\\repoze.browserid-0.3-py2.7.egg', 'C:\\Python27\\lib\\site-packages\\paste-1.7.5.1-py2.7.egg', 'C:\\Python27\\lib\\site-packages\\django_pjax-1.0-py2.7.egg', 'C:\\Python27\\lib\\site-packages\\paramiko-1.7.7.1-py2.7.egg', 'C:\\Python27\\lib\\site-packages\\pycrypto-2.4.1-py2.7-win32.egg', 'C:\\Python27', 'C:\\Python27\\Lib', 'C:\\Windows\\system32\\python27.zip', 'C:\\Python27\\DLLs', 'C:\\Python27\\lib\\plat-win', 'C:\\Python27\\lib\\lib-tk', 'C:\\Python27\\lib\\site-packages', 'C:\\Python27\\lib\\site-packages\\PIL', 'C:\\Python27\\lib\\site-packages\\win32', 'C:\\Python27\\lib\\site-packages\\win32\\lib', 'C:\\Python27\\lib\\site-packages\\Pythonwin', 'C:\\Python27\\lib\\site-packages\\setuptools-0.6c11-py2.7.egg-info', 'C:\\Python27\\Scripts', 'C:\\Python27\\Lib\\site-packages\\django\\bin'] 

以上

import _socket 

的原因是,我是能夠從直接的python提示符導入套接字!所以塞滿了我現有的路徑。我還沒有精確地確定哪個目錄讓人高興。它至少會揭示給別人,爲什麼我沒有它會得到錯誤。

想法?建議? 謝謝。 :)


我砍死庫/ socket.py並插入:

import sys 
sys.path.append('C:\\Python27\\DLLs') 

以上

import _socket 
+0

檢查這個問題http:// stackoverflow。com/questions/4527958/python-virtualenv-questions – 2011-12-31 14:48:21

+0

仍在尋找解決方案,我找到並刪除了AppData/Python *。重新安裝Python,現在有一個不同的錯誤。查看更新的原始問題。 – 2012-01-04 21:30:31

+0

我發現了一個涉及黑客C:\ Python27 \ Lib \ socket.py的解決方法。看看。 – 2012-01-25 23:36:33

回答

11

嘗試設置PYTHONPATHPYTHONPATH=C:\Python27;C:\Python27\Lib(在開始大寫字母C)。

這可以通過在命令提示符處鍵入set PYTHONPATH=C:\Python27;C:\Python27\Lib來完成。

PYTHONPATH將恢復到先前那個命令提示符窗口關閉時的狀態。

+0

對不起,但沒有幫助。 :( – 2012-01-01 23:22:32

+0

它這次。:)謝謝:) – 2012-10-09 20:45:29

2

它很奇怪,但在錯誤信息

AssertionError: Filename c:\Python27\Lib\os.py does not start with any of these prefixes: ['C:\\Python27'] 

看來,它預計路徑名的文件os.py開始用大寫字母「C」和前綴完整性檢查是區分大小寫的。

由於庫的路徑是從PYTHONPATH派生的,在您的情況下驅動器號是小寫,所以將其更改爲大寫以解決問題似乎是合乎邏輯的。

PYTHONPATH=C:\Python27;C:\Python27\Lib 
+0

我有這個相同的問題。只需重申,您必須查看錯誤消息並確保路徑設置中所有字母的/ case /與錯誤消息匹配。另外,更改PATH設置後,必須在使用新設置之前啓動新的命令提示符。 – hazzey 2014-07-18 13:30:11

4

對於_socket錯誤,你pythonpython路徑更改爲:

PYTHONPATH=C:\Python27;C:\Python27\Lib;C:\Python27\DLLs 
0

我也遇到了這個問題,在Windows 7上我的Python27安裝是在C:\ Program Files文件,這顯然包含在路徑中的空間。因此,在不包含Python的獨立Windows 7系統上,我在C:\ Python27(默認安裝路徑)下執行了全新的Python27安裝,然後安裝了setuptools(for easy_install)。

之後,我能夠安裝virtualenv CLEANLY沒有上述斷言錯誤(我用easy_install)。

我知道OP的系統已經在使用默認路徑,但我想我會在這裏添加我的經驗作爲某些特定情況的可能解決方案。

1

我討厭「總結」的答案,但正如我剛剛經歷了一個非常類似的問題,我想我會在這裏發佈我的解決方案以及從這些答案中得出的幾個。

The assert error was caused because I did not have a PYTHONPATH environment variable setup.

The socket error was caused because I did not include the PythonXX\DLLs folder.

全PYTHONPATH環境變量應該如下:

PYTHONPATH=C:\Python27;C:\Python27\Lib;C:\Python27\DLLs 
0

這個問題大概是從其他多個區分大小寫的文件系統宿醉。

完整的解決方案:

  1. 從virtualenv中讀取錯誤消息。請記住它所說的「不以任何這些前綴開頭的部分:['C:\\ Python27']」。

  2. 編輯PYTHONPATH,或者如果您沒有(開始+中斷,高級系統設置,環境變量),則創建它。除非您計劃切換用戶帳戶,否則它應該無關緊要,如果它是用戶變量還是系統變量。

  3. 使案例與錯誤消息相符。兩個驅動器盤符和文件夾名稱必須匹配(如果沒有安裝到C:\ Python27,大概也是中間文件夾)。你可以忽略雙反斜槓,一個很好。

我修復bug的唯一改變如下。更改應該對任何新的命令/終端會話生效(關閉您打開的cmd.exe/powershell /等窗口)。

  • 舊狀態:PYTHONPATH = C:\PYTHON27;C:\PYTHON27\LIB;C:\PYTHON27\DLLS

  • 新狀態:PYTHONPATH = C:\Python27;C:\Python27\LIB;C:\Python27\DLLS

如果你在你的PYTHONPATH任何其他項目,你不妨改變這些呢,但是它可能不會影響virtualenv的運行能力。

20

3歲的問題,但希望這個答案仍然可以幫助某人。不要設置環境變量(這對我來說神祕地不起作用),您可以在設置虛擬環境時將路徑傳遞給Python安裝。在Windows中,您必須輸出python.exe,但似乎在Linux/OS X中您只是路徑到文件夾。例子:

的Windows:

virtualenv -p <PATH TO PYTHON.EXE> venv 

的Linux/Mac的:

virtualenv -p </user/path/to/python> venv 

兩個創建當前目錄下的子文件夾中的 「VENV」 虛擬環境。

+0

這是解決它的東西!謝謝 – hulkinBrain 2016-11-05 19:33:45

0

更改 「virtualenv.py」 - > change_prefix有:

def change_prefix(filename, dst_prefix): 
    ... 
prefixes = sorted(prefixes, key=len, reverse=True) 
filename = str(os.path.abspath(filename))[0].lower() + str(os.path.abspath(filename))[1:] 
for src_prefix in prefixes: 
    if filename.startswith(src_prefix): 
     _, relpath = filename.split(src_prefix, 1) 
     if src_prefix != os.sep: # sys.prefix == "/" 
      assert relpath[0] == os.sep 
      relpath = relpath[1:] 
     return join(dst_prefix, relpath) 
assert False, "Filename %s does not start with any of these prefixes: %s" % \ 
    (filename, prefixes) 

    ... 
0

我從一個稍微不同的原因有同樣的斷言錯誤。錯誤是does not start with any of these prefixes: ['C:\\python27']並注意小寫字母「p」。實際的文件夾名稱都使用大寫字母-P Python27。 PTYHONPATH中的所有前綴都是正確的。但是我輸入了PYTHONHOME變量作爲C:\python27,雖然這對Python很好,但它在virtualenv中導致了錯誤。

3

我已經加入

if is_win:  
     prefixes.append('C:\PYTHON27')  

到virtualenv.py和它的作品。

1

這已經提交給Python開發團隊的錯誤:https://github.com/pypa/virtualenv/pull/697

與此同時爲什麼不改變Python的安裝文件夾的名稱(ptyhon27)作出斷言工作,或者如果你覺得更舒適那隻需使用替代位置重新安裝python即可。它沒有問題。

1

你可以試試以下(supppose你的Python,在全局路徑):

python -m virtualenv [foldername] 

這個工作對我來說,贏10的virtualenv 15.1.0

我把它從這個video,它將執行python庫而不是調用windows exe文件。

3

目前類似的問題,顯示錯誤:

AssertionError: Filename C:\Python27\Lib\os.py does not start with any of 
these prefixes: ['C:\\python27'] 

所不同的是在 'C:\ python27' 爲小寫。所以這個問題體現在你不能安裝新的virtualenv或者創建一個嵌套的virtualenvs(我們有時候會進行測試)。 原因是在PYTHONPATH

PYTHONPATH=C:\Python27;C:\Python27\Lib 

對於virtualenv.py某種原因sys.path中的conent將返回C:\ python27,但路徑所需的模塊會形成PYTHONPATH並用「C開始: \ Python27 \ Lib',因此斷言錯誤。

長話短說,只是未設置PYTHONPATH

+0

這幫助我解決了這個問題。對我來說暗示道路似乎沒有問題,但情況不同。 – srodriguez 2017-12-22 09:56:18

+0

只有這個工作(使用Cygwin) – slashdottir 2018-03-02 18:12:49