在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
答案 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)
此问题可能是其他更多区分大小写的文件系统的遗留问题。
完整的解决方案:
从virtualenv中读取错误消息。请记住它所说的“不以任何这些前缀开头的部分:['C:\\ Python27']”。
编辑PYTHONPATH,如果没有,则创建它(开始+中断,高级系统设置,环境变量)。除非您打算切换用户帐户,否则无论是用户变量还是系统变量都无关紧要。
使案例与错误消息匹配。两个驱动器号和文件夹名必须匹配(如果你没有安装到C:\ Python27,也可能是中间文件夹)。你可以忽略双反斜杠,一个没问题。
我修复错误的唯一变化如下。更改应对任何新的命令/终端会话生效(关闭打开的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
可以安装任何其他库