-
Notifications
You must be signed in to change notification settings - Fork 0
Home
pyenv is a tool for simple Python version management.
To install pyenv, please refer to the Readme.
If you experience failure while executing a script that issues python
command or executes another python script:
- try executing the command again in the appropriate
pyenv shell
- check if the command is a python script or invokes a python script and fix the shebang to
#!/usr/bin/env python
Such failures usually show up as:
- incompatible python version, but you are certain that you have correct version installed
- module not found but you are certain that the module is installed
- the issue can be traced back to something related to
PYTHONPATH
Also, see below for suggested build environment.
pyenv will try its best to download and compile the wanted Python version, but sometimes compilation fails because of unmet system dependencies, or compilation succeeds but the new Python version exhibits weird failures at runtime. The following instructions are our recommendations for a sane build environment.
-
Mac OS X:
If you haven't done so, install Xcode Command Line Tools (
xcode-select --install
) and Homebrew. Then:
# optional, but recommended:
brew install openssl readline xz
- Ubuntu/Debian/Mint:
apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev xz-utils
- CentOS/Fedora 21 and below:
FIXME: you may need to install xz
to build some CPython version
yum install gcc zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel
- Fedora 22 and above:
FIXME: you may need to install xz
to build some CPython version
dnf install -y gcc zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel
- openSUSE:
FIXME: you may need to install xz
to build some CPython version
zypper install gcc automake openssl-devel ncurses-devel readline-devel zlib-devel
- Arch Linux:
FIXME: you may need to install xz
to build some CPython version
pacman -S base-devel openssl zlib
- Linuxbrew:
brew install bzip2 openssl readline sqlite xz
See also Common build problems for further information.
See Why pyenv?
The string read from a .python-version
file must match the name of an existing
directory in ~/.pyenv/versions/
. You can see the list of installed Python
versions with pyenv versions
.
If you're using [python-build][], typically this will be one of [its Python version names][versions].
Other version managers might allow fuzzy version matching on the string read
from .python-version
file, e.g. they might allow "3.3" (without patch suffix)
to match the latest Python 3.3 release. pyenv will not support this, because
such behavior is unpredictable and therefore harmful.
-
Check that
pyenv
is in your PATH:which pyenv
-
Check that pyenv's shims directory is in PATH:
echo $PATH | grep --color=auto "$(pyenv root)/shims"
If not, see the [
pyenv init
step][init] in installation instructions.
Please search [existing issues][issues] and open a new one if you can't find any answers. Here's a script that dumps information about your current environment; you can use [Gist][] to paste it online and share the URL to it in your bug report:
git clone https://github.com/yyuu/pyenv-doctor.git "$(pyenv root)/plugins/pyenv-doctor"
pyenv doctor
Typically it's one of the following:
- bash:
~/.bash_profile
- zsh:
~/.zshrc
- ksh:
~/.kshrc
- other:
~/.profile
With bash on Ubuntu, you probably already have a ~/.profile
. In that case you
should add pyenv config there instead of creating a ~/.bash_profile
. However,
since this file is read only once per desktop login, you may achieve quicker
results by adding pyenv to ~/.bashrc
instead.
See Unix shell initialization for more info about how config files get loaded.
The PYENV_DEBUG
is the environment variable to debug logging in pyenv. You can try to enable debug logging by setting something in the environment variable like PYENV_DEBUG=1 pyenv versions
.
Some of 3rd party tool like PyInstaller might require CPython installation built with --enable-framework
. You can build CPython with shared library as follows.
$ env PYTHON_CONFIGURE_OPTS="--enable-framework" pyenv install 3.5.0
Some of 3rd party tool like PyInstaller might require CPython installation built with --enable-shared
. You can build CPython with shared library as follows.
$ env PYTHON_CONFIGURE_OPTS="--enable-shared" pyenv install 3.5.0
Since pyenv (precisely, python-build) will build CPython with configuring RPATH, you don't have to set LD_LIBRARY_PATH
to specify library path on GNU/Linux.