web-dev-qa-db-ja.com

複数のpythonバージョンを管理する適切な方法は何ですか?

Python 2.6がデフォルトのPythonとしてインストールされているマシンを持っています。次に、Python 2.7をインストールし、シンボリックリンクとして手動で/ usr/bin/pythonを作成しました新しいインストールに。

次に、私は command-not-foundの問題に遭遇 でした。私はそれを再インストールしようとしています:

Sudo apt-get remove command-not-found

そして私はこのエラーを受け取ります:

/usr/bin/python does not match the
python default version. It must be
reset to point to python2.6

しかし、私は本当にPython 2.7をデフォルトにしたいのです。どうすればこの混乱を修正できますか?

21
ripper234

OSのデフォルトPython(またはPerlなど)を変更することは本当に悪い考えです。このインタプリタは実際にはOSの一部であり、他のOSコンポーネントがある可能性がありますこれらは、そのバージョンのインタプリタで動作するように特別に記述されています。

たとえばRedhatでは、システムソフトウェアの更新を実行するyumツールはpythonアプリケーションです。これを壊したくはありません。このようなアプリケーションは、特定の、おそらく非標準の、pythonインストールされているバージョンではインストールされていない可能性のあるモジュール。たとえばUbuntuでは、Pythonで記述された組み込みOSツールの一部がStormと呼ばれるORMを使用すると思いますこれはPython標準ライブラリの一部ではありません。クリーンなPython 2.7のインストールには、Stormモジュールの特定の予期されるバージョンがインストールされていますか? Stormのバージョン?いいえ?次に、OSのチャンクを壊しました。

これを行う正しい方法は、pythonの優先バージョンをインストールし、.bash_profileやパスなどを設定して、それを使用するようにユーザーアカウントを設定することです。また、 Pythonのvirtualenvモジュール。

16
Simon Hibbs

この混乱をどうやって修正しますか?

再インストールするだけですpython。変更を取り消します(シンボリックリンク)。

なぜそれをデフォルトとして欲しいのですか?必要なときは常にpython2.7または含める#!/usr/bin/python2.7(シバン)(実行可能)スクリプトの先頭。

python2.7システム全体のデフォルトとして、Ubuntuの新しいリリースを使用します(現在は、Ubuntu 11.04、コードネームはNatty)。そのバージョンをデフォルトとして使用します。

将来的には、symlinkで行ったような手動の介入は避けてください。これは、特にディストリビューションで管理されたファイルに当てはまり、特にPythonインストールのような複雑な獣に当てはまります。

8
tshepang

免責事項:私はスタックオーバーフローにこれと同じ答えを投稿しました:

https://stackoverflow.com/questions/2812520/pip-dealing-with-multiple-python-versions/50319252

これが私の問題です。 Python3で動作します。主な機能は次のとおりです。

  • 各Pythonバージョンはソースからコンパイルされます
  • すべてのバージョンがローカルにインストールされています
  • システムのデフォルトPythonインストールを破損することはありません)
  • 各Pythonバージョンはvirtualenvで分離されています

手順は次のとおりです。

  1. 別の方法でいくつかの追加のpythonバージョンがインストールされている場合は、それらを削除します。たとえば、$ HOME/.local/lib/python3.xなど(これもグローバルにインストールされたものです)ただし、システムのデフォルトのpython3バージョンには触れないでください。

  2. 次のディレクトリ構造の下にあるさまざまなpythonバージョンのソースをダウンロードします。

    $HOME/
        python_versions/ : download Python-*.tgz packages here and "tar xvf" them.  You'll get directories like this:
          Python-3.4.8/
          Python-3.6.5/
          Python-3.x.y/
          ...
    
  3. 各「Python-3.xy /」ディレクトリで、次のことを行います(do[〜#〜] not [〜#〜]「Sudo」を使用ステップのいずれかで!):

    mkdir root
    ./configure --prefix=$PWD/root 
    make -j 2
    make install
    virtualenv --no-site-packages -p root/bin/python3.x env
    
  4. 「python_versions /」で、次のようなファイルを作成します。

    env_python3x.bash:
    
    #!/bin/bash
    echo "type deactivate to exit"
    source $HOME/python_versions/Python-3.x.y/env/bin/activate
    
  5. さて、あなたがpython3.xを選ぶことを望むときはいつでも、

    source $HOME/python_versions/env_python3x.bash
    

    virtualenvに入る

  6. Virtualenvで、お気に入りのpythonパッケージを

    pip install --upgrade package_name
    
  7. Virtualenvとpython versionを終了するには、単に「deactivate」と入力します

2
El Sampsa

pyenv

https://github.com/pyenv/pyenv

Pyenvを使用すると、 Node.js NVMRuby RVM のように、単一のユーザーに対してSudoを使用せずに複数のPythonバージョンを管理できます。

Pyenvをインストールします。

curl https://pyenv.run | bash

次に、.bashrc

export PATH="${HOME}/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

インストールPythonインストールするバージョン:

pyenv install --list

python必要なバージョンをインストールします。

# Increase the chances that the build will have all dependencies.
# https://github.com/pyenv/pyenv/wiki/Common-build-problems
Sudo apt build-dep python3
Sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev \
  libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \
  xz-utils tk-dev libffi-dev liblzma-dev python-openssl git

# Build and install a Python version from source.
pyenv install 3.8.0

利用可能なリストPythonバージョン:

pyenv versions

私たちは今持っています:

* system (set by /home/cirsan01/.pyenv/version)
  3.8.0

別のpythonバージョンを選択:

pyenv global 3.8.0
python --version
python3 --version

両方の出力:

Python 3.8.0

これで、パッケージのインストールと使用を通常どおり続行できます。

pip install cowsay
python -c 'import cowsay; cowsay.Tux("Python is fun")'
cowsay 'hello'

すべてがローカルでクリーンな環境にインストールされていることを確認するには、次のようにします。

python -c 'import cowsay; print(cowsay.__file__)'
which cowsay

プロジェクトごとの使用量

前のセクションでは、グローバル設定でpyenvを使用する方法を説明しました。

ただし、通常必要なのは、特定のpythonとパッケージバージョンをプロジェクトごとに設定することです。これを行う方法です。

まず、以前と同じように必要なPythonバージョンをインストールします。

次に、プロジェクトディレクトリ内から、必要なpythonバージョンを次のように設定します。

pyenv local 3.8.0

これはファイルを作成します.python-versionバージョン文字列を含みます。

そして今、私たちのプロジェクトのためだけにパッケージをローカルにインストールしましょう:TODO:見栄えの良い方法はありません: https://stackoverflow.com/questions/30407446/pyenv-choose-virtualenv-directory/59267972#59267972

今、誰かがあなたのプロジェクトを使いたいとき、彼らはします:

pyenv local

Python versionを正しいバージョンに設定します。

関連スレッド:

Ubuntu 18.04、pyenv 1.2.15でテスト済み。

複数のpythonディストリビューションをMacとUbuntuに多数配置しています。ここに私の推奨を示します。

  1. システムをpython unmolested:決して使用しないでください。

  2. プライマリが1つだけ必要な場合pythonディストリビューション、ダウンロードしてインストール Canopy からインストール)インストールが完了したら、「システムのPythonとして設定」を選択し、インストールできますCanopyのGUIパッケージマネージャーからのパッケージ。

    • Canopyは、パッケージのインストールを可能にするPyPiパッケージマネージャーコマンドであるpipにも対応しています(例:pip install python-Twitter
  3. 仮想環境の使用を計画している場合(つまり、pythonプログラムを開発していて、それぞれに専用のクリーンなpython=環境を必要とし、それらを簡単に切り替える手段が必要な場合) )、私はCanacyよりAnacondaをお勧めします。それは virtual environment manager tool のためです。これにより、
0
Adam Hughes