How install both Python32 and Python33 on OS X for testing with tox?

  • I'm adding Python 3.x support to my open-source project and want to add both Py32 and Py33 test environments to my tox.ini. I already have Py26 and Py27 tox environments that work fine and I just installed Python 3.3 from homebrew and got the Py33 tox environment working nicely.

    The problem seems to be that homebrew doesn't have an obvious way to install both 3.3 and 3.2 and a somewhat extended Googling did not yield an answer.

    What's the best way to do this that won't lead me into trouble further down the road? I'm happy to build from source if that's the best solution, have done that before with good success but don't want to break out the axe if a pocket knife will get the job done 🙂

    I'm running OS X 10.8.4

  • The installation instructions referenced by @dimitry-cheremushkin have been changed and recommend using pyenv instead. Tox and Pyenv can be used together like this:

    First we ensure we have pyenv installed:

    $ brew update
    $ brew install pyenv

    Then we install all the needed python versions with pyenv. This might take time. See for available versions.

    $ pyenv install 2.6.9 && pyenv ... && pyenv install 3.5.0

    In the directory of our, let us run pyenv local ... as below. It will create .python-version file that stores the versions to be used.

    $ pyenv local 2.6.9 2.7.10 3.2.6 3.3.6 3.4.3 3.5.0

    So, pyenv installed the Python distributions to a dir ~/.pyenv/shims. To let them to be found instead default Python, the dir must be prepended to the PATH environment variable. Even though more permanent solutions exist, the following does the trick for one terminal session:

    $ eval "$(pyenv init -)"
    $ echo $PATH

    The following has been recommended to be run to ensure the shims have correct packages:

    $ pyenv rehash

    Now, let us assume the following tox.ini:

    envlist = py26,py27,py30,py31,py32,py33,py34,py35

    Finally we can run tox in all the environments:

    $ tox
    py26: commands succeeded
    py27: commands succeeded
    py30: commands succeeded
    py31: commands succeeded
    py32: commands succeeded
    py33: commands succeeded
    py34: commands succeeded
    py35: commands succeeded
    congratulations :)

Log in to reply

Suggested Topics

  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2