insomnihack

When sleep eludes, the keyboard beckons

Multiple Python Versions on OSX with Virtualenv and Macports

September 22, 2010 Dale 10 Comments

Update: I’ve recently switched from Macports to Homebrew. I describe my new configuration in this post.

Here’s a rundown of how I get multiple versions of Python working on OSX. I’m running Snow Leopard on an older Macbook Pro that canĀ  only run in 32-bit mode. If you’ve got a newer 64-bit Mac, your mileage may vary. In the next month or so, work will be providing me with a new iMac. If I run into any issues using this technique on that 64-bit machine, I’ll update this post.

Installing Macports

If you don’t already have it installed, grab the DMG file for Macports. Verify that you have Xcode installed, and optionally, the X11 User package if you plan to install ports that use X-Windows (X11 User is installed by default on Leopard and Snow Leopard).

Installing Python

Now that you’ve got Macports installed, its time to install the versions of Python you want to work with. I’ll be describing the steps you’ll take at the Terminal to get all versions of Python that Macports supports installed, but you could just as easily use a Macports GUI like Porticus to install these packages. You might also only want a subset of these packages installed.

Installing Macports via Porticus

Installing Macports via Porticus

From a shell prompt, enter the following commands.

[text]
sudo port -v selfupdate
sudo port install python24
sudo port install python25
sudo port install python26
sudo port install python27
sudo port install python31
sudo port install python_select
[/text]

At the time his post was written, executing these commands would install Python 2.4.6, 2.5.5, 2.6.6, 2.7, and 3.1.2, along with python_select into /opt/local/bin. Running python_select with the -l option from the Terminal should result in something like this.

[shell]
[dale@DaleBook ~]$ python_select -l
Available versions:
current none python24 python25 python26 python26-apple python27 python31
[/shell]

On Snow Leopard, you’ll see a python26-apple option like above. On Leopard, you’ll see python25-apple. This is the system Python installation.

Installing Virtualenv

If you haven’t done so already, now it is time to install virtualenv and virtualenvwrapper into your system Python. Now, you don’t have to install them into your main Python. You could switch to another one of the installed versions with python_select, but then you’d have to remember to switch to that version before using your virtual environments, and you might encounter configuration issues with editors. I just find installing these into the system Python results in less headaches.

Both of these are installable via Macports, easy_install, or pip. I’ll stick to the easy_install route, although I tend to favor pip when working with the virtual environments themselves.

[shell]
sudo easy_install virtualenv
sudo easy_install virtualenvwrapper
[/shell]

Pick a location to store your virtual environments in (I use ~/Envs), then add an export statement to your ~/.profile file to point WORKON_HOME to this location. See the virtualenvwrapper docs for more information on configuring this if you run into problems.

Create and Use a Virtual Environment

Now lets try it all out. Let’s create a virtual environment running Python 2.7. From the Terminal, enter the following:

[text]
mkvirtualenv –no-site-packages –python=/opt/local/bin/python2.7 py27
[/text]

This should result in a new virtual environment based on Python 2.7. By changing the path specified with the –python option, you’ll be able to create a clean install of any of the versions of Python supported by Macports. Again, see the virtualenvwrapper documentation for more information on how to switch between and manage your virtual environments.

Programming mac, Python, virtualenv

Comments

  1. Roger says

    October 23, 2010 at 6:25 PM

    This doesn’t seem to work for me at all.
    I have macports, and all my python versions, python_select etc working great in there.

    if I do easy_install virutalenv etc.. that will go to /Library/etc.. into the system python.

    after I set my WORKON_HOME, and then do source .bashrc I see:

    [502][rstudner.rs: /Users/me]$ source .bashrc
    Traceback (most recent call last):
    File “”, line 1, in
    ImportError: No module named virtualenvwrapper.hook_loader
    virtualenvwrapper.sh: There was a problem running the initialization hooks. If Python could not import the module virtualenvwrapper.hook_loader, check that virtualenv has been installed for VIRTUALENVWRAPPER_PYTHON=/opt/local/bin/python and that PATH is set properly.

    Thus, it is freakin’ out about macports python path etc versus the system path.

    and if I then go ahead and just do mkvirtualenv temp

    go into there/bin.. the python like is to my system python, not to one of the macport pythons..

    Any thoughts?

  2. Dale says

    October 27, 2010 at 5:54 PM

    Hi Roger,

    Sorry for taking so long to reply.

    After you installed virtualenvwrapper, did you make sure to add code to your bash profile to source the virtualenvwrapper.sh? For example, I’ve got this in my ~/.profile under OSX:


    if [ -f /usr/local/bin/virtualenvwrapper.sh ]; then
    source /usr/local/bin/virtualenvwrapper.sh
    fi
    export WORKON_HOME=$HOME/.virtualenvs

  3. Roger says

    December 30, 2010 at 7:11 PM

    back, after months.. still no luck

    I can actually do the above *2.7* fine.

    but if I try with 2.6 I get this:

    mkvirtualenv –python=/opt/local/bin/python2.6 test
    Running virtualenv with interpreter /opt/local/bin/python2.6
    New python executable in test/bin/python
    Installing setuptools…………..
    Complete output from command /Users/rstudner/.virtualenvs/t…ython -c “#!python
    \”\”\”Bootstrap setuptoo…

    ” /Library/Python/2.6/site-packa…6.egg:
    Traceback (most recent call last):
    File “”, line 278, in
    File “”, line 238, in main
    File “build/bdist.linux-i686/egg/setuptools/command/easy_install.py”, line 21, in

    File “build/bdist.linux-i686/egg/setuptools/package_index.py”, line 2, in
    File “/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/urllib2.py”, line 111, in
    from urllib import (unwrap, unquote, splittype, splithost, quote,
    File “/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/urllib.py”, line 1335, in
    from _scproxy import _get_proxy_settings, _get_proxies
    ImportError: No module named _scproxy
    —————————————-
    …Installing setuptools…done.
    Traceback (most recent call last):
    File “/Library/Python/2.6/site-packages/virtualenv-1.5.1-py2.6.egg/virtualenv.py”, line 1647, in
    main()
    File “/Library/Python/2.6/site-packages/virtualenv-1.5.1-py2.6.egg/virtualenv.py”, line 558, in main
    prompt=options.prompt)
    File “/Library/Python/2.6/site-packages/virtualenv-1.5.1-py2.6.egg/virtualenv.py”, line 654, in create_environment
    install_setuptools(py_executable, unzip=unzip_setuptools)
    File “/Library/Python/2.6/site-packages/virtualenv-1.5.1-py2.6.egg/virtualenv.py”, line 384, in install_setuptools
    _install_req(py_executable, unzip)
    File “/Library/Python/2.6/site-packages/virtualenv-1.5.1-py2.6.egg/virtualenv.py”, line 360, in _install_req
    cwd=cwd)
    File “/Library/Python/2.6/site-packages/virtualenv-1.5.1-py2.6.egg/virtualenv.py”, line 624, in call_subprocess
    % (cmd_desc, proc.returncode))
    OSError: Command /Users/rstudner/.virtualenvs/t…ython -c “#!python
    \”\”\”Bootstrap setuptoo…

    ” /Library/Python/2.6/site-packa…6.egg failed with error code 1

  4. Dale says

    January 6, 2011 at 3:52 PM

    Also, are you running Snow Leopard? Unlike 2.7, there’s already a 2.6 on Snow Leopard. Before I switched to the MacPorts configuration I blogged about, I used the Python.org version of 2.6. It ended up using the same site-packages folder as the OS version of Python, so if I installed a package under Python.org Python, I’d see it installed under the OS version, too. I don’t know if MacPorts has the same issue or not. Do you get the same error when you run use –no-site-packages?

    Another thing you might try is completely removing MacPorts and reinstalling it fresh. I do this occasionally when a MacPorts installer fubars my installation. I’d then verify virtualenv and virtualenvwrapper work with my system Python on their own. I’d then reinstall MacPorts and the various versions of Python I wanted to work with and see if virtualenv and virtualenvwrapper then worked.

    To uninstall MacPorts from the default location /opt/local/, perform this command from a terminal window.

    %% sudo rm -rf \
    /opt/local \
    /etc/manpaths.d/macports \
    /etc/paths.d/macports \
    /Applications/DarwinPorts \
    /Applications/MacPorts \
    /Library/LaunchDaemons/org.macports.* \
    /Library/Receipts/DarwinPorts*.pkg \
    /Library/Receipts/MacPorts*.pkg \
    /Library/StartupItems/DarwinPortsStartup \
    /Library/Tcl/darwinports1.0 \
    /Library/Tcl/macports1.0

    Here’s the command all on one line:

    sudo rm -rf /opt/local /etc/manpaths.d/macports /etc/paths.d/macports /Applications/DarwinPorts /Applications/MacPorts /Library/LaunchDaemons/org.macports.* /Library/Receipts/DarwinPorts*.pkg Library/Receipts/MacPorts*.pkg /Library/StartupItems/DarwinPortsStartup /Library/Tcl/darwinports1.0 /Library/Tcl/macports1.0

    I use Porticus, and I tend to uninstall it and its plist files deleting MacPorts. I reinstall it after I get my basic MacPorts installed, then us it to install packages. Finally, I tend not to install any Packages in my global site-packages folders other than virtualenv and virtualenvwrapper in the system Python, favoring everything in the sandbox instead. I’ll occasionally break this rule if there’s some gnarly CPython build that requires a lot of installed C libraries.

  5. Tom says

    January 17, 2011 at 12:31 PM

    On the version I downloaded just now with Snow Leapord I had to add these lines to my .profile:

    if [ -f /opt/local/bin/virtualenvwrapper_bashrc-2.6 ]; then
    source /opt/local/bin/virtualenvwrapper_bashrc-2.6
    fi
    export WORKON_HOME=$HOME/.virtualenvs

    It seems that virtualenvwrapper.sh did not exist for me, this is probably because I installed py26-virtualenvwrapper with macports instead of going the easy_install route

  6. Davide Ganz says

    May 23, 2011 at 11:06 AM

    The error’s message:

    ImportError: No module named virtualenvwrapper.hook_loader
    virtualenvwrapper.sh: There was a problem running the initialization hooks. If Python could not import the module virtualenvwrapper.hook_loader, check that virtualenv has been installed for VIRTUALENVWRAPPER_PYTHON=/opt/local/bin/python and that PATH is set properly.

    Can come from a the fact than you have several versions of python
    installed and the virtualenv in use isn’t the right one…
    So after you installed a new python version you should provide
    do reinstall a virtualenv for this python version with the “-I” flag on pip install.
    So the way to have a new virtuaelenv installed is:

    $pip install -I virtualenv

    After that you can follow to install virtualenvwrapper.

  7. Stu says

    May 24, 2011 at 8:23 PM

    I was stuck with the same error …

    Import Error: No module named virtualenvwrapper.hook_loader
    virtualenvwrapper.sh: There was a problem running the initialization hooks. If
    Python could not import the module virtualenvwrapper.hook_loader, check
    that virtualenv has been installed for
    VIRTUALENVWRAPPER_PYTHON=/opt/local/bin/python and that PATH is set
    properly.

    … because virtualenvwrapper.sh was calling a different version of python from the one that was used when virtualenvwrapper.sh was installed. (I had changed my $PATH)

    Instead of installing a new virtualenvwrapper for the new python, I directed virtualenvwrapper to use the old python by adding the following to my .bash_profile

    VIRTUALENVWRAPPER_PYTHON=

  8. Stu says

    May 24, 2011 at 8:27 PM

    … apologies. The last line of the above post should read:

    VIRTUALENVWRAPPER_PYTHON=XXX

    I substituted XXX with the default python from when virtualenvwrapper was installed

  9. Jay says

    July 2, 2011 at 6:54 PM

    I have this “ImportError: No module named virtualenvwrapper.hook_loader” problem too. I’m on OS X 10.5 Leopard, previously I had python 2.6 and I was using virtualenvwrapper then, but when I used Macports to install python 2.7, now I get this problem.

    Still trying to figure it out. I want to do what Stu did, but instead of telling virtualenv to use the old python, I want it to use the new python. Any ideas, guys?

  10. Dale says

    July 21, 2011 at 9:15 PM

    Hi Jay, sorry for the late reply. I wish I could help more with your macports/virtualenv issues, but I’ve since moved over to Homebrew for package management on OSX. I recently did a clean install of Snow Leopard, as well. My system site-packages folder was filled with a lot of cruft from before I started using virtualenv, and it seemed like the quickest way to start out fresh. Everything’s rocking along quite smoothly now with Python 2.7.2 and 3.2.1 VMs.

Leave a Reply

Your email address will not be published. Required fields are marked *

About Me

Hi, my name's Dale, and this is my tech blog. Read More…

Search

Tags

blogging c# database Django documentation Email furniture git hacks htpc IPython Linux mac nas packaging PyCharm Python Roleplaying tools twitter unit tests virtualenv Visual Studio vmware Windows

Copyright © 2025 · Equilibre Theme on Genesis Framework · WordPress · Log in