Larry Eitel
Larry Eitel

Reputation: 1407

virtualenv on windows 7 returns AssertionError

Having trouble with virtualenv on Windows 7.

I run:

virtualenv _testenv

It returns:

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']

I have the following environment variables:

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

Installed 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

I updated the PYTHONPATH=C:\Python27;C:\Python27\Lib Still looking for a solution, I found and removed AppData/Python*. Reinstalled Python and now have a different error:

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

I hacked Lib/socket.py and inserted:

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']

Above

import _socket

The reason was that I was able to import socket from straight python prompt! So stuffed my existing path. I haven't narrowed down exactly which directory made it happy. It at least will reveal to someone else why I am getting the error without it.

Ideas? Suggestions? Thank you. :)


I hacked Lib/socket.py and inserted:

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

Above

import _socket

Upvotes: 16

Views: 11173

Answers (14)

nitesh
nitesh

Reputation: 1

Windows solution:

This is due to the difference between PYTHONPATH variable path and the one pipenv is expecting.

Suppose System Variable has below PYTHONPATH‍,

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

And pipenv is looking for PYTHONPATH something like below:

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

Here, observe that the path text pipenv is looking has different case than what is set in System Environment variable.

To solve this issue try below steps by opening command prompt in folder where pipenv is to run:

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

You need to give exact same path that is shown in the AssertionError.

Then run below command to create pipenv

> pipenv install numpy

Any other library can be installed

Upvotes: 0

Tomasz Swider
Tomasz Swider

Reputation: 2382

There is similar problem currently that shows error:

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

The difference is in 'C:\python27' being lower case. So the problem manifest itself in that you can not install new virtualenv or make a nested virtualenvs (we do it for testing sometimes). The cause is in the conent of the PYTHONPATH

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

For some reason sys.path in virtualenv.py will return c:\python27, but path to required modules will come form the PYTHONPATH and start with 'C:\Python27\Lib', hence the assertion error.

Long story short, just unset the PYTHONPATH.

Upvotes: 5

Yang_2333
Yang_2333

Reputation: 714

You can try the following (supppose your python is in global path):

python -m virtualenv [foldername]

This works for me, Win 10, virtualenv 15.1.0

I get it from this video, it will excute the python lib instead of calling windows exe.

Upvotes: 4

esalgado
esalgado

Reputation: 751

This is an error already submitted to the Python development team: https://github.com/pypa/virtualenv/pull/697

In the meanwhile why not just change the Python installation folder name to (ptyhon27) to make the assertion work, or if you feel more confortable with that just reinstall python using the alternative location. It works with no issue.

Upvotes: 1

user3930993
user3930993

Reputation: 31

I have added

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

to virtualenv.py and it works.

Upvotes: 3

user405
user405

Reputation: 579

I had the same assertion error from a slightly different cause. The error was does not start with any of these prefixes: ['C:\\python27'] and note the lowercase "p". The actual folder names all use capital-P Python27. All the prefixes in PTYHONPATH were correct. However I had entered the PYTHONHOME variable as C:\python27 and although this was fine for Python, it caused the error in virtualenv.

Upvotes: 0

LICF
LICF

Reputation: 1

Change "virtualenv.py" --> 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)

  ...

Upvotes: 0

ojii
ojii

Reputation: 4781

Try to set PYTHONPATH to PYTHONPATH=C:\Python27;C:\Python27\Lib (uppercase C at the start).

This can be done at the command prompt by typing set PYTHONPATH=C:\Python27;C:\Python27\Lib.

PYTHONPATH will revert back to whatever it previously was once that command prompt window is closed.

Upvotes: 13

Mike Davlantes
Mike Davlantes

Reputation: 1035

3 year old question, but hopefully this answer can still help someone. Rather than setting the environment variables (which mysteriously didn't work for me), you can pass the path to your Python installation when setting up the virtual environment. In Windows, you have to path out to python.exe, but it seems that in Linux/OS X you just path to the folder. Examples:

Windows:

virtualenv -p <PATH TO PYTHON.EXE> venv

Linux/Mac:

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

Both create a virtual environment in subfolder "venv" in current directory.

Upvotes: 31

Jim Gray
Jim Gray

Reputation: 675

This issue is presumably a hangover from other more case-sensitive file systems.

Complete solution:

  1. Read the error message from virtualenv. Remember the part where it says "does not start with any of these prefixes: ['C:\\Python27']".

  2. Edit PYTHONPATH, or create it if you don't have one (Start+Break, Advanced system settings, Environment Variables). It shouldn't matter if it's a user variable or a system variable, unless you plan to switch user accounts.

  3. Make the case match the error message. BOTH the drive letter AND the folder name must match (presumably intermediate folders as well, if you didn't install to C:\Python27). You can ignore the double backslash, one is fine.

The only change I made to fix the bug was as follows. The change should take effect for any new command / terminal sessions (close your open cmd.exe / powershell / etc. windows).

  • Old state: PYTHONPATH = C:\PYTHON27;C:\PYTHON27\LIB;C:\PYTHON27\DLLS

  • New state: PYTHONPATH = C:\Python27;C:\Python27\LIB;C:\Python27\DLLS

If you have any other items in your PYTHONPATH, you might as well change those too, but it probably won't affect virtualenv's ability to run.

Upvotes: 0

Jesse
Jesse

Reputation: 8393

I hate "summary" answers, but as I just went through a very similar issue I thought I would post my solution here as well which draws from several of these answers.

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.

The full PYTHONPATH environment variable should look follows:

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

Upvotes: 1

Sabuncu
Sabuncu

Reputation: 5264

I also ran into this problem on Windows 7. My Python27 installation was under C:\Program Files, which obviously contains a space in the path. So, on a separate Windows 7 system that did not contain Python, I did a fresh install of Python27 under C:\Python27 (the default installation path), followed by an install of setuptools (for easy_install).

Afterwards, I was able to install virtualenv CLEANLY without the above assertion error (I used easy_install).

I know that the OP's system is already using the default path, but I thought I would add my experience here as a possible solution for certain specific cases.

Upvotes: 0

David Marble
David Marble

Reputation: 1887

For the _socket error, change your pythonpython path to:

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

Upvotes: 4

Abhijit
Abhijit

Reputation: 63737

Its strange but from the error message

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

It seems, it expects the path-name for the file os.py to start with upper case 'C' and the prefix sanity check is case sensitive.

As the path to the library is derived from PYTHONPATH and in your case the drive letter is in lower case, it seems logical to change it to upper case to resolve the issue.

like

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

Upvotes: 2

Related Questions