Python windows 7上的virtualenv返回AssertionError
Windows 7上的virtualenv出现问题 我运行: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
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
这个问题可能是其他更区分大小写的文件系统的遗留问题 完整解决方案:
- 旧状态: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