windows 7上的virtualenv返回AssertionError

时间:2011-12-31 14:43:40

标签: 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')()
  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

安装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

我攻击了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 _socket

原因是我能够从直接python提示导入套接字!因此填补了我现有的道路。我还没有缩小到哪个目录让它开心。它至少会告诉别人为什么我没有它就会收到错误。

想法?建议? 谢谢。 :)


我攻击了Lib / socket.py并插入:

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

以上

import _socket

14 个答案:

答案 0 :(得分:30)

3岁的问题,但希望这个答案仍然可以帮助某人。您可以在设置虚拟环境时将路径传递给Python安装,而不是设置环境变量(这对我来说神秘不起)。在Windows中,你必须找到python.exe,但似乎在Linux / OS X中你只是路径到该文件夹​​。例子:

<强>窗:

virtualenv -p <PATH TO PYTHON.EXE> venv

<强>的Linux / Mac的:

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

两者都在当前目录中的子文件夹“venv”中创建虚拟环境。

答案 1 :(得分:12)

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

这可以通过键入set PYTHONPATH=C:\Python27;C:\Python27\Lib在命令提示符下完成。

PYTHONPATH将在命令提示窗口关闭后恢复到以前的状态。

答案 2 :(得分:4)

对于_socket错误,请将pythonpython路径更改为:

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

答案 3 :(得分:4)

目前有类似的问题显示错误:

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

区别在于C:\ python27&#39;小写。所以问题表现在你无法安装新的virtualenv或制作嵌套的virtualenvs(我们有时会进行测试)。 原因在于PYTHONPATH的内容

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

由于某些原因,virtualenv.py中的sys.path将返回c:\ python27,但是所需模块的路径将来自PYTHONPATH并以&#39; C:\ Python27 \ Lib&#39;开头,因此断言错误。

长话短说,只是取消PYTHONPATH

答案 4 :(得分:3)

我添加了

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

到virtualenv.py并且有效。

答案 5 :(得分:3)

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

python -m virtualenv [foldername]

这对我有用,Win 10,virtualenv 15.1.0

我从这个video得到它,它将执行python lib而不是调用windows exe。

答案 6 :(得分: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

答案 7 :(得分:1)

我讨厌“总结”的答案,但是当我刚刚经历了一个非常类似的问题时,我想我会在这里发布我的解决方案,其中有几个答案。

  

断言错误是因为我没有PYTHONPATH   环境变量设置。

     

引发套接字错误是因为我没有包含   PythonXX \ DLLs文件夹。

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

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

答案 8 :(得分:1)

这是已经提交给Python开发团队的错误:https://github.com/pypa/virtualenv/pull/697

同时为什么不只是将Python安装文件夹名称更改为(ptyhon27)以使断言有效,或者如果您觉得使用备用位置重新安装python更加舒适。它没有任何问题。

答案 9 :(得分:0)

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

之后,我能够在没有上述断言错误的情况下安装virtualenv CLEANLY(我使用了easy_install)。

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

答案 10 :(得分:0)

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

完整的解决方案:

  1. 从virtualenv中读取错误消息。请记住它所说的“不以任何这些前缀开头的部分:['C:\\ Python27']”。

  2. 编辑PYTHONPATH,如果没有,则创建它(开始+中断,高级系统设置,环境变量)。除非您打算切换用户帐户,否则无论是用户变量还是系统变量都无关紧要。

  3. 使案例与错误消息匹配。两个驱动器号和文件夹名必须匹配(如果你没有安装到C:\ Python27,也可能是中间文件夹)。你可以忽略双反斜杠,一个没问题。

  4. 我修复错误的唯一变化如下。更改应对任何新的命令/终端会话生效(关闭打开的cmd.exe / powershell / etc窗口)。

    • 旧州:PYTHONPATH = C:\PYTHON27;C:\PYTHON27\LIB;C:\PYTHON27\DLLS

    • 新州:PYTHONPATH = C:\Python27;C:\Python27\LIB;C:\Python27\DLLS

    如果您的PYTHONPATH中还有其他物品,您也可以更改它们,但它可能不会影响virtualenv的运行能力。

答案 11 :(得分:0)

改变&#34; virtualenv.py&#34; - &GT; change_prefix with:

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)

  ...

答案 12 :(得分:0)

我从一个稍微不同的原因得到了相同的断言错误。错误为does not start with any of these prefixes: ['C:\\python27']并注意小写“p”。实际的文件夹名称都使用capital-P Python27。 PTYHONPATH中的所有前缀都是正确的。但是我输入了PYTHONHOME变量为C:\python27,虽然这对Python很好,但它在virtualenv中引起了错误。

答案 13 :(得分:0)

Windows解决方案:

这是由于PYTHONPATH变量路径与pipenv所期望的变量路径之间的差异。

假设系统变量的值低于PYTHONPATH‍

PYTHONPATH = C:\User\Bruce\AppData\Local\Programs\Python\Python37-32

pipenv正在寻找PYTHONPATH,如下所示:

PYTHONPATH = C:\users\bruce\appdata\local\programs\python\python37-32

在这里,观察到的路径文本pipenv与系统环境变量中设置的大小写不同。

要解决此问题,请尝试以下步骤,方法是在要运行pipenv的文件夹中打开命令提示符:

> set PYTHONPATH=C:\users\bruce\appdata\local\programs\python\python37-32

您需要提供与AssertionError中显示的路径完全相同的路径。

然后运行以下命令来创建pipenv

> pipenv install numpy

可以安装任何其他库