sthomps
sthomps

Reputation: 205

Problem Setting Up A Virtualenv

I'm trying to set up a virtualenv on Ubuntu 10.04 with Python 2.6.5 but having some issues.

After having installed virtualenv and virtualenv wrapper with pip, I'm running the command: virtualenv mysite-env --verbose

I get the following error:

Creating mysite-env/lib/python2.6
Symlinking Python bootstrap modules
  Symlinking mysite-env/lib/python2.6/lib-dynload
  Symlinking mysite-env/lib/python2.6/config
  Symlinking mysite-env/lib/python2.6/os.py
  Ignoring built-in bootstrap module: posix
  Symlinking mysite-env/lib/python2.6/posixpath.py
  Cannot import bootstrap module: nt
  Symlinking mysite-env/lib/python2.6/ntpath.py
  Symlinking mysite-env/lib/python2.6/genericpath.py
  Symlinking mysite-env/lib/python2.6/fnmatch.py
  Symlinking mysite-env/lib/python2.6/locale.py
  Symlinking mysite-env/lib/python2.6/encodings
  Symlinking mysite-env/lib/python2.6/codecs.py
  Symlinking mysite-env/lib/python2.6/stat.py
  Symlinking mysite-env/lib/python2.6/UserDict.py
  Symlinking mysite-env/lib/python2.6/lib-dynload/readline.so
  Symlinking failed, copying to mysite-env/lib/python2.6/lib-dynload/readline.so
Traceback (most recent call last):
  File "/usr/local/bin/virtualenv", line 9, in <module>
    load_entry_point('virtualenv==1.6.1', 'console_scripts', 'virtualenv')()
  File "/usr/local/lib/python2.6/dist-packages/virtualenv.py", line 795, in main
    never_download=options.never_download)
  File "/usr/local/lib/python2.6/dist-packages/virtualenv.py", line 886, in create_environment
    site_packages=site_packages, clear=clear))
  File "/usr/local/lib/python2.6/dist-packages/virtualenv.py", line 1020, in install_python
    copy_required_modules(home_dir)
  File "/usr/local/lib/python2.6/dist-packages/virtualenv.py", line 974, in copy_required_modules
    copyfile(filename, dst_filename)
  File "/usr/local/lib/python2.6/dist-packages/virtualenv.py", line 414, in copyfile
    copyfileordir(src, dest)
  File "/usr/local/lib/python2.6/dist-packages/virtualenv.py", line 391, in copyfileordir
    shutil.copy2(src, dest)
  File "/usr/lib/python2.6/shutil.py", line 99, in copy2
    copyfile(src, dst)
  File "/usr/lib/python2.6/shutil.py", line 53, in copyfile
    fdst = open(dst, 'wb')
IOError: [Errno 20] Not a directory: 'mysite-env/lib/python2.6/lib-dynload/readline.so'

If I run it again, I get the following:

Directory mysite-env/lib/python2.6 already exists
    Symlinking Python bootstrap modules
      Ignoring built-in bootstrap module: posix
      Cannot import bootstrap module: nt
      Symlinking mysite-env/lib/python2.6/lib-dynload/readline.so
      Symlinking mysite-env/lib/python2.6/copy_reg.py
      Symlinking mysite-env/lib/python2.6/types.py
      Symlinking mysite-env/lib/python2.6/re.py
      Symlinking mysite-env/lib/python2.6/sre.py
      Symlinking mysite-env/lib/python2.6/sre_parse.py
      Symlinking mysite-env/lib/python2.6/sre_constants.py
      Symlinking mysite-env/lib/python2.6/sre_compile.py
      Ignoring built-in bootstrap module: zlib
      Symlinking mysite-env/lib/python2.6/warnings.py
      Symlinking mysite-env/lib/python2.6/linecache.py
      Symlinking mysite-env/lib/python2.6/_abcoll.py
      Symlinking mysite-env/lib/python2.6/abc.py
    Creating mysite-env/lib/python2.6/site-packages
    Writing mysite-env/lib/python2.6/site.py
    Writing mysite-env/lib/python2.6/orig-prefix.txt
    Creating parent directories for mysite-env/include
    Symlinking mysite-env/include/python2.6
    Creating mysite-env/bin
    New python executable in mysite-env/bin/python
    Changed mode of mysite-env/bin/python to 0755
    Testing executable with mysite-env/bin/python -c "import sys; print(sys.prefix)"
    ERROR: The executable mysite-env/bin/python is not functioning
    ERROR: It thinks sys.prefix is u'/usr' (should be '/vagrant/mysite-env')
    ERROR: virtualenv is not compatible with this system or executable

Any ideas how to fix this? Thanks!

Upvotes: 6

Views: 8450

Answers (4)

David
David

Reputation: 18281

Seems like its been a bit since you asked this. Virtualbox's file driver for the /vagrant directory cannot recognize symbolic links which virtualenv uses a lot.

This can be best demonstrated with a simple

mybox:/vagrant$ ln -s ~/.bashrc
ln: failed to create symbolic link ./.bashrc': Protocol error`

Update:

Because of vagrant's incompatibility with symbolic links & virtualenv, my vagrant boxes/instances were task/project specific ( only 1 virtualenv). So in the vagrant host side/instance folder I would keep a short script to install python & virtualenv, then do

pip install -r /vagrant/requirement

Further documentation can be found here. https://docs.vagrantup.com/v2/provisioning/basic_usage.html

with the appropriate bash if checks ( does python exist, does /home/vagrant/env exist ), you can provision your box once and then append a call to activate your ~/env install so that when you login, your already setup and ready to go.

Upvotes: 5

Anthony Roberts
Anthony Roberts

Reputation: 2021

This issue already has several answers, but I want to share my solution, in case it helps the next person.

Where I run the command matters. I was running the virtualenv env command inside the /vagrant shared folder. That was my mistake. When I cd back to my HOME dir, then run virtualenv env, everything works fine.

Upvotes: 1

NitinJ
NitinJ

Reputation: 459

This error occurs because the virtualenv.py file you are using is not compatible with the python version that you are using.. For python2.7 you need to downalod the binaries from the virtualenv.org site and then compile them using

python setup.py install

after the installation use the installed binary(not the virtualenv.py file) to create virtual environment by

virtualenv --no-site-packages <path to virtual env directory>/env/

Upvotes: 2

Brian Clapper
Brian Clapper

Reputation: 26230

I haven't run across this particular problem, but I've personally switched from using virtualenv to pythonbrew. pythonbrew is a different solution to the same problem; it works more like rvm in the Ruby community: It builds entirely self-contained versions of Python, from scratch, under $HOME/.pythonbrew; then, it provides shell functions that allow you to switch easily from one to another (editing the path for you, etc.). It's not as lightweight as virtualenv, but it also doesn't piggyback on the system Python, so the whole symlink issue goes away. You can also install multiple Python versions, even if they're not installed in the base system.

Your mileage may vary, of course, but pythonbrew has been working well for me.

Upvotes: 0

Related Questions