update README

This commit is contained in:
Yamashita Yuu 2013-02-06 22:08:16 +09:00
parent 167ff2a198
commit be53bb8951

299
README.md
View file

@ -30,47 +30,114 @@ This project was forked from [rbenv](https://github.com/sstephenson/rbenv) and
## Table of Contents ## Table of Contents
* [1 How It Works](#section_1) * [How It Works](#how-it-works)
* [2 Installation](#section_2) * [Understanding PATH](#understanding-path)
* [2.1 Basic GitHub Checkout](#section_2.1) * [Understanding Shims](#understanding-shims)
* [2.1.1 Upgrading](#section_2.1.1) * [Choosing the Python Version](#choosing-the-python-version)
* [2.2 Neckbeard Configuration](#section_2.3) * [Locating the Python Installation](#locating-the-python-installation)
* [3 Usage](#section_3) * [Installation](#installation)
* [3.1 pyenv global](#section_3.1) * [Basic GitHub Checkout](#basic-github-checkout)
* [3.2 pyenv local](#section_3.2) * [Upgrading](#upgrading)
* [3.3 pyenv shell](#section_3.3) * [Neckbeard Configuration](#neckbeard-configuration)
* [3.4 pyenv versions](#section_3.4) * [Uninstalling Python Versions](#uninstalling-python-versions)
* [3.5 pyenv version](#section_3.5) * [Command Reference](#command-reference)
* [3.6 pyenv rehash](#section_3.6) * [pyenv local](#pyenv-local)
* [3.7 pyenv which](#section_3.7) * [pyenv global](#pyenv-global)
* [3.8 pyenv whence](#section_3.8) * [pyenv shell](#pyenv-shell)
* [4 Development](#section_4) * [pyenv versions](#pyenv-versions)
* [4.1 Version History](#section_4.1) * [pyenv version](#pyenv-version)
* [4.2 License](#section_4.2) * [pyenv rehash](#pyenv-rehash)
* [pyenv which](#pyenv-which)
* [pyenv whence](#pyenv-whence)
* [Development](#development)
* [Version History](#version-history)
* [License](#license)
## <a name="section_1"></a> 1 How It Works ## How It Works
pyenv operates on the per-user directory `~/.pyenv`. Version names in At a high level, pyenv intercepts Python commands using shim
pyenv correspond to subdirectories of `~/.pyenv/versions`. For executables injected into your `PATH`, determines which Python version
example, you might have `~/.pyenv/versions/2.7.3` and has been specified by your application, and passes your commands along
`~/.pyenv/versions/2.7.3`. to the correct Python installation.
Each version is a working tree with its own binaries, like ### Understanding PATH
`~/.pyenv/versions/2.7.3/bin/python2.7` and
`~/.pyenv/versions/3.2.3/bin/python3.2`. pyenv makes _shim binaries_
for every such binary across all installed versions of Python.
These shims are simple wrapper scripts that live in `~/.pyenv/shims` When you run a command like `python` or `pip`, your operating system
and detect which Python version you want to use. They insert the searches through a list of directories to find an executable file with
directory for the selected version at the beginning of your `$PATH` that name. This list of directories lives in an environment variable
and then execute the corresponding binary. called `PATH`, with each directory in the list separated by a colon:
Because of the simplicity of the shim approach, all you need to use /usr/local/bin:/usr/bin:/bin
pyenv is `~/.pyenv/shims` in your `$PATH`.
## <a name="section_2"></a> 2 Installation Directories in `PATH` are searched from left to right, so a matching
executable in a directory at the beginning of the list takes
precedence over another one at the end. In this example, the
`/usr/local/bin` directory will be searched first, then `/usr/bin`,
then `/bin`.
### <a name="section_2.1"></a> 2.1 Basic GitHub Checkout ### Understanding Shims
pyenv works by inserting a directory of _shims_ at the front of your
`PATH`:
~/.pyenv/shims:/usr/local/bin:/usr/bin:/bin
Through a process called _rehashing_, pyenv maintains shims in that
directory to match every Python command across every installed version
of Python—`python`, `pip`, and so on.
Shims are lightweight executables that simply pass your command along
to pyenv. So with pyenv installed, when you run, say, `pip`, your
operating system will do the following:
* Search your `PATH` for an executable file named `pip`
* Find the pyenv shim named `pip` at the beginning of your `PATH`
* Run the shim named `pip`, which in turn passes the command along to
pyenv
### Choosing the Python Version
When you execute a shim, pyenv determines which Python version to use by
reading it from the following sources, in this order:
1. The `PYENV_VERSION` environment variable, if specified. You can use
the [`pyenv shell`](#pyenv-shell) command to set this environment
variable in your current shell session.
2. The application-specific `.python-version` file in the current
directory, if present. You can modify the current directory's
`.python-version` file with the [`pyenv local`](#pyenv-local)
command.
3. The first `.python-version` file found by searching each parent
directory until reaching the root of your filesystem, if any.
4. The global `~/.pyenv/version` file. You can modify this file using
the [`pyenv global`](#pyenv-global) command. If the global version
file is not present, pyenv assumes you want to use the "system"
Python—i.e. whatever version would be run if pyenv weren't in your
path.
### Locating the Python Installation
Once pyenv has determined which version of Python your application has
specified, it passes the command along to the corresponding Python
installation.
Each Python version is installed into its own directory under
`~/.pyenv/versions`. For example, you might have these versions
installed:
* `~/.pyenv/versions/2.7.3/`
* `~/.pyenv/versions/3.3.0/`
* `~/.pyenv/versions/pypy-1.9/`
Version names to pyenv are simply the names of the directories in
`~/.pyenv/versions`.
## Installation
### Basic GitHub Checkout
This will get you going with the latest version of pyenv and make it This will get you going with the latest version of pyenv and make it
easy to fork and contribute any changes back upstream. easy to fork and contribute any changes back upstream.
@ -105,11 +172,11 @@ easy to fork and contribute any changes back upstream.
6. Rebuild the shim binaries. You should do this any time you install 6. Rebuild the shim binaries. You should do this any time you install
a new Python binary (for example, when installing a new Python version, a new Python binary (for example, when installing a new Python version,
or when installing a gem that provides a binary). or when installing a package that provides a binary).
$ pyenv rehash $ pyenv rehash
#### <a name="section_2.1.1"></a> 2.1.1 Upgrading #### Upgrading
If you've installed pyenv using the instructions above, you can If you've installed pyenv using the instructions above, you can
upgrade your installation at any time using git. upgrade your installation at any time using git.
@ -128,7 +195,7 @@ tag:
v0.1.0 v0.1.0
$ git checkout v0.1.0 $ git checkout v0.1.0
### <a name="section_2.2"></a> 2.2 Neckbeard Configuration ### Neckbeard Configuration
Skip this section unless you must know what every line in your shell Skip this section unless you must know what every line in your shell
profile is doing. profile is doing.
@ -160,60 +227,30 @@ opposed to this idea. Here's what `pyenv init` actually does:
Run `pyenv init -` for yourself to see exactly what happens under the Run `pyenv init -` for yourself to see exactly what happens under the
hood. hood.
## <a name="section_3"></a> 3 Usage ### Uninstalling Python Versions
As time goes on, Python versions you install will accumulate in your
`~/.pyenv/versions` directory.
To remove old Python versions, `pyenv uninstall` command to automate
the removal process.
Or, simply `rm -rf` the directory of the
version you want to remove. You can find the directory of a particular
Python version with the `pyenv prefix` command, e.g. `pyenv prefix
2.6.8`.
## Command Reference
Like `git`, the `pyenv` command delegates to subcommands based on its Like `git`, the `pyenv` command delegates to subcommands based on its
first argument. The most common subcommands are: first argument. The most common subcommands are:
### <a name="section_3.1"></a> 3.1 pyenv global ### pyenv local
Sets the global version of Python to be used in all shells by writing Sets a local application-specific Python version by writing the version
the version name to the `~/.pyenv/version` file. This version can be name to a `.python-version` file in the current directory. This version
overridden by a per-project `.pyenv-version` file, or by setting the overrides the global version, and can be overridden itself by setting
`PYENV_VERSION` environment variable. the `PYENV_VERSION` environment variable or with the `pyenv shell`
$ pyenv global 2.7.3
The special version name `system` tells pyenv to use the system Python
(detected by searching your `$PATH`).
When run without a version number, `pyenv global` reports the
currently configured global version.
And also, you can specify multiple versions as global Python. Commands
within these Python versions are searched by specified order.
$ pyenv global 2.7.3 3.2.3
$ pyenv global
2.7.3
3.2.3
$ pyenv which python2.7
/home/yyuu/.pyenv/versions/2.7.3/bin/python2.7
$ pyenv which python3.2
/home/yyuu/.pyenv/versions/3.2.3/bin/python3.2
$ pyenv which python
/home/yyuu/.pyenv/versions/2.7.3/bin/python
You can manage your version stack by `pyenv push` and `pyenv pop`.
$ pyenv global
2.7.3
3.2.3
$ pyenv push 3.3.0
$ pyenv global
2.7.3
3.2.3
3.3.0
$ pyenv pop
2.7.3
3.2.3
### <a name="section_3.2"></a> 3.2 pyenv local
Sets a local per-project Python version by writing the version name to
an `.pyenv-version` file in the current directory. This version
overrides the global, and can be overridden itself by setting the
`PYENV_VERSION` environment variable or with the `pyenv shell`
command. command.
$ pyenv local 2.7.3 $ pyenv local 2.7.3
@ -223,7 +260,14 @@ configured local version. You can also unset the local version:
$ pyenv local --unset $ pyenv local --unset
And also, you can specify multiple versions as local Python. Commands Previous versions of pyenv stored local version specifications in a
file named `.pyenv-version`. For backwards compatibility, pyenv will
read a local version specified in an `.pyenv-version` file, but a
`.python-version` file in the same directory will take precedence.
**pyenv feature**
You can specify multiple versions as local Python. Commands
within these Python versions are searched by specified order. within these Python versions are searched by specified order.
$ pyenv local 2.7.3 3.2.3 $ pyenv local 2.7.3 3.2.3
@ -251,11 +295,56 @@ You can manage your version stack by `pyenv push` and `pyenv pop`.
2.7.3 2.7.3
3.2.3 3.2.3
### <a name="section_3.3"></a> 3.3 pyenv shell ### pyenv global
Sets the global version of Python to be used in all shells by writing
the version name to the `~/.pyenv/version` file. This version can be
overridden by an application-specific `.python-version` file, or by
setting the `PYENV_VERSION` environment variable.
$ pyenv global 2.7.3
The special version name `system` tells pyenv to use the system Python
(detected by searching your `$PATH`).
When run without a version number, `pyenv global` reports the
currently configured global version.
**pyenv feature**
You can specify multiple versions as global Python. Commands
within these Python versions are searched by specified order.
$ pyenv global 2.7.3 3.2.3
$ pyenv global
2.7.3
3.2.3
$ pyenv which python2.7
/home/yyuu/.pyenv/versions/2.7.3/bin/python2.7
$ pyenv which python3.2
/home/yyuu/.pyenv/versions/3.2.3/bin/python3.2
$ pyenv which python
/home/yyuu/.pyenv/versions/2.7.3/bin/python
You can manage your version stack by `pyenv push` and `pyenv pop`.
$ pyenv global
2.7.3
3.2.3
$ pyenv push 3.3.0
$ pyenv global
2.7.3
3.2.3
3.3.0
$ pyenv pop
2.7.3
3.2.3
### pyenv shell
Sets a shell-specific Python version by setting the `PYENV_VERSION` Sets a shell-specific Python version by setting the `PYENV_VERSION`
environment variable in your shell. This version overrides both environment variable in your shell. This version overrides
project-specific versions and the global version. application-specific versions and the global version.
$ pyenv shell pypy-1.9 $ pyenv shell pypy-1.9
@ -271,7 +360,9 @@ prefer not to use shell integration, you may simply set the
$ export PYENV_VERSION=pypy-1.9 $ export PYENV_VERSION=pypy-1.9
And also, you can specify multiple versions via `PYENV_VERSION` **pyenv feature**
You can specify multiple versions via `PYENV_VERSION`
environment variable in your shell. environment variable in your shell.
$ pyenv shell pypy-1.9 2.7.3 $ pyenv shell pypy-1.9 2.7.3
@ -281,7 +372,7 @@ environment variable in your shell.
pypy-1.9 (set by PYENV_VERSION environment variable) pypy-1.9 (set by PYENV_VERSION environment variable)
2.7.3 (set by PYENV_VERSION environment variable) 2.7.3 (set by PYENV_VERSION environment variable)
### <a name="section_3.4"></a> 3.4 pyenv versions ### pyenv versions
Lists all Python versions known to pyenv, and shows an asterisk next to Lists all Python versions known to pyenv, and shows an asterisk next to
the currently active version. the currently active version.
@ -294,7 +385,7 @@ the currently active version.
jython-2.5.3 jython-2.5.3
pypy-1.9 pypy-1.9
### <a name="section_3.5"></a> 3.5 pyenv version ### pyenv version
Displays the currently active Python version, along with information on Displays the currently active Python version, along with information on
how it was set. how it was set.
@ -302,23 +393,23 @@ how it was set.
$ pyenv version $ pyenv version
2.7.3 (set by /home/yyuu/.pyenv/version) 2.7.3 (set by /home/yyuu/.pyenv/version)
### <a name="section_3.6"></a> 3.6 pyenv rehash ### pyenv rehash
Installs shims for all Python binaries known to pyenv (i.e., Installs shims for all Python binaries known to pyenv (i.e.,
`~/.pyenv/versions/*/bin/*`). Run this command after you install a new `~/.pyenv/versions/*/bin/*`). Run this command after you install a new
version of Python, or install a gem that provides binaries. version of Python, or install a package that provides binaries.
$ pyenv rehash $ pyenv rehash
### <a name="section_3.7"></a> 3.7 pyenv which ### pyenv which
Displays the full path to the binary that pyenv will execute when you Displays the full path to the executable that pyenv will invoke when
run the given command. you run the given command.
$ pyenv which python3.2 $ pyenv which python3.2
/home/yyuu/.pyenv/versions/3.2.3/bin/python3.2 /home/yyuu/.pyenv/versions/3.2.3/bin/python3.2
### <a name="section_3.8"></a> 3.8 pyenv whence ### pyenv whence
Lists all Python versions with the given command installed. Lists all Python versions with the given command installed.
@ -327,7 +418,7 @@ Lists all Python versions with the given command installed.
2.7.3 2.7.3
3.2.3 3.2.3
## <a name="section_4"></a> 4 Development ## Development
The pyenv source code is [hosted on The pyenv source code is [hosted on
GitHub](https://github.com/yyuu/pyenv). It's clean, modular, GitHub](https://github.com/yyuu/pyenv). It's clean, modular,
@ -336,7 +427,11 @@ and easy to understand, even if you're not a shell hacker.
Please feel free to submit pull requests and file bugs on the [issue Please feel free to submit pull requests and file bugs on the [issue
tracker](https://github.com/yyuu/pyenv/issues). tracker](https://github.com/yyuu/pyenv/issues).
### <a name="section_4.1"></a> 4.1 Version History ### Version History
**0.2.0** (February XX, 2013)
* Import changes from rbenv 0.4.0.
**0.1.2** (October 23, 2012) **0.1.2** (October 23, 2012)
@ -352,7 +447,7 @@ tracker](https://github.com/yyuu/pyenv/issues).
* Initial public release. * Initial public release.
### <a name="section_4.2"></a> 4.2 License ### License
(The MIT license) (The MIT license)