Python windows 7上的virtualenv返回AssertionError

Python windows 7上的virtualenv返回AssertionError,python,windows-7,virtualenv,Python,Windows 7,Virtualenv,Windows 7上的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')() Fi

Windows 7上的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']
已安装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\Lib
仍然在寻找解决方案,我找到并删除了AppData/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
在上面

原因是我能够从直接的python提示符导入套接字!因此,填充了我现有的路径。我还没有详细说明哪个目录让它开心。它至少会向其他人揭示我为什么会在没有它的情况下出错

想法?建议? 谢谢。:)


我黑了Lib/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 sys
sys.path.append('C:\\Python27\\DLLs')
在上面


尝试将
PYTHONPATH
设置为
PYTHONPATH=C:\Python27;C:\Python27\Lib
(开头大写C)

可以在命令提示下键入
set PYTHONPATH=C:\Python27;C:\Python27\Lib


一旦命令提示符窗口关闭,
PYTHONPATH
将恢复到以前的状态。

这很奇怪,但来自错误消息

AssertionError: Filename c:\Python27\Lib\os.py does not start with any of these prefixes: ['C:\\Python27']
看起来,它希望文件
os.py
的路径名以大写字母“C”开头,并且前缀健全性检查区分大小写

由于库的路径来自
PYTHONPATH
,并且在您的情况下,驱动器号是小写的,因此将其更改为大写似乎是合乎逻辑的,以解决此问题


对于_套接字错误,请将pythonpython路径更改为:

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

我在Windows7上也遇到了这个问题。我的Python27安装在C:\Program Files下,路径中显然包含一个空格。因此,在不包含Python的单独Windows 7系统上,我在C:\Python27(默认安装路径)下重新安装了Python27,然后安装了setuptools(便于安装)

之后,我能够干净地安装virtualenv,而没有上述断言错误(我使用easy_install)

我知道OP的系统已经在使用默认路径,但我想我会在这里添加我的经验,作为某些特定情况下的可能解决方案。

我讨厌“摘要”答案,但由于我刚刚遇到了一个非常类似的问题,我想我也会在这里发布我的解决方案,它借鉴了这些答案中的一些

导致断言错误的原因是我没有
PYTHONPATH
环境变量设置

导致套接字错误的原因是我没有包括 PythonXX\DLLs文件夹

完整的PYTHONPATH环境变量应如下所示:

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

这个问题可能是其他更区分大小写的文件系统的遗留问题

完整解决方案:

  • 从virtualenv读取错误消息。记住其中的一部分,它说“不以任何前缀开头:['C:\\Python27']”

  • 编辑PYTHONPATH,或者如果没有PYTHONPATH(启动+中断、高级系统设置、环境变量),则创建PYTHONPATH。它是用户变量还是系统变量并不重要,除非您计划切换用户帐户

  • 使案例与错误消息匹配。驱动器号和文件夹名称必须匹配(如果您没有安装到C:\Python27,可能还需要中间文件夹)。可以忽略双反斜杠,一个就可以了

  • 我为修复这个bug所做的唯一更改如下。更改应在任何新的命令/终端会话中生效(关闭打开的cmd.exe/powershell/etc.windows)

    • 旧状态:PYTHONPATH=
      C:\PYTHON27;C:\PYTHON27\LIB;C:\PYTHON27\DLLS

    • 新状态:PYTHONPATH=
      C:\Python27;C:\Python27\LIB;C:\Python27\DLLS


    如果你的PYTHONPATH中有任何其他项目,你也可以更改它们,但这可能不会影响virtualenv的运行能力。

    3年前的问题,但希望这个答案仍然可以帮助某人。在设置虚拟环境时,您可以传递Python安装的路径,而不是设置环境变量(这对我来说不可思议地不起作用)。在Windows中,您必须找到python.exe的路径,但在Linux/OS X中,您似乎只需要找到该文件夹的路径。示例:

    窗口:

    virtualenv -p <PATH TO PYTHON.EXE> venv
    
    virtualenv -p </user/path/to/python> venv
    
    virtualenv-p-venv
    
    Linux/Mac:

    virtualenv -p <PATH TO PYTHON.EXE> venv
    
    virtualenv -p </user/path/to/python> venv
    
    virtualenv-p-venv
    
    两者都在当前目录的子文件夹“venv”中创建虚拟环境。

    更改“virtualenv.py”-->更改前缀为:

    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)
    
      ...
    

    我有相同的断言错误,原因稍有不同。错误是
    不以以下任何前缀开头:['C:\\python27']
    并注意小写的“p”。实际的文件夹名称都使用大写的Python27。PTYHONPATH中的所有前缀都是正确的。然而,我输入了PYTHONHOME变量作为
    C:\python27
    ,虽然这对Python来说很好,但它在virtualenv中导致了错误

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

    这是一个已经提交给Python开发团队的错误:

    同时,为什么不将Python安装文件夹名称更改为(ptyhon27)以使断言工作,或者如果您觉得更容易使用,那么只需使用其他位置重新安装Python即可。它可以正常工作。

    您可以尝试以下方法(假设您的python处于全局路径):

    这适用于我,Win 10,virtualenv 15.1.0


    我从中了解到,它将执行python库,而不是调用windows exe。

    当前存在类似问题,显示错误:

    AssertionError: Filename C:\Python27\Lib\os.py does not start with any of 
    these prefixes: ['C:\\python27']
    
    区别在于“C:\python27”是小写。因此,问题表现在您不能安装新的virtualenv或创建嵌套的virtualenvs(我们有时这样做是为了测试)。 原因在于蟒蛇

    PYTHONPATH=C:\Python27;C:\Python27\Lib
    
    由于某些原因,virtualenv.py中的sys.path将返回c:\python27,但所需模块的路径将为com
    python -m virtualenv [foldername]
    
    AssertionError: Filename C:\Python27\Lib\os.py does not start with any of 
    these prefixes: ['C:\\python27']
    
    PYTHONPATH=C:\Python27;C:\Python27\Lib
    
    PYTHONPATH = C:\User\Bruce\AppData\Local\Programs\Python\Python37-32
    
    PYTHONPATH = C:\users\bruce\appdata\local\programs\python\python37-32
    
    > set PYTHONPATH=C:\users\bruce\appdata\local\programs\python\python37-32
    
    > pipenv install numpy