複数のPythonバージョンを管理する正しい方法は何ですか?

複数のPythonバージョンを管理する正しい方法は何ですか?

Python 2.6がデフォルトのPythonとしてインストールされているコンピュータがあります。その後、Python 2.7をインストールし、新しいインストールへのシンボリックリンクとして/usr/bin/pythonを手動で作成しました。

だから私はやるコマンドが見つからない問題が発生しました。再インストールしようとしています。

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がデフォルトであることを願っています。この混乱をどのように解決しますか?

答え1

オペレーティングシステムでデフォルトのPython(またはPerlなど)を変更する本物悪い考え。インタプリタは実際にはオペレーティングシステムの一部であり、そのバージョンのインタプリタで使用するために特別に書かれた他のオペレーティングシステムコンポーネントがあります。

たとえば、Redhatでシステムソフトウェアアップデートを実行するyumツールはPythonアプリケーションです。あなたは本当にこれを壊したくありません。これらのアプリケーションは、インストールしている特定の(非標準の)Pythonモジュールによって異なります。インストールするバージョンでは使用できない場合があります。たとえば、Ubuntuでは、Pythonで書かれた組み込みOSツールの一部が、Python標準ライブラリの一部ではなくStormというORMを使用していると思います。新しくインストールしたPython 2.7に期待される特定のバージョンのStormモジュールがインストールされていますか?ストーム版ありますか?いいえ?その場合、オペレーティングシステムの一部が破損しています。

正しい方法は、好みのPythonバージョンをインストールし、.bash_profile、パスなどを設定して使用するユーザーアカウントを設定することです。 Pythonのvirtualenvモジュールを見ることもできます。

答え2

ピエンブ

https://github.com/pyenv/pyenv

Pyenvを使用すると、個々のユーザーに対してsudoを使用することなく、次のように複数のPythonバージョンを管理できます。Node.js NVMそしてRuby RVM

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のバージョンが正しいバージョンに設定されます。

関連トピック:

Ubuntu 18.04、pyenv 1.2.15でテストされました。

答え3

この混乱をどのように解決しますか?

ただ再インストールします。python。変更はキャンセルされます(記号リンク)。

なぜデフォルトとして使用するのですか?必要に応じて、python2.7(実行可能)スクリプトの先頭に(shebang)を使用または含めます。#!/usr/bin/python2.7

必ず欲しいとこだわるならpython2.7システム全体のデフォルトとして、最新バージョンのUbuntuが使用されます(現在のUbuntu 11.04、コード名Natty)。このバージョンをデフォルトバージョンとして使用します。

今後はシンボリックリンクと同様に手動介入を避けてください。これは、配布管理ファイル、特にPythonインストールなどの複雑なファイルの場合に特に当てはまります。

答え4

私たちはMacとUbuntuに多くのPythonディストリビューションを配置しました。ここに私が推奨するものがあります。

  1. システムPythonを邪魔しないでください。絶対に使用しないでください。

  2. 主要なPythonディストリビューションのみが必要な場合は、ダウンロードしてインストールしてください。思考から。インストール時に「マイシステムPythonに設定」を選択すると、CanopyのGUIパッケージマネージャからパッケージをインストールできます。

    • pipCanopyはPyPiパッケージマネージャコマンドとも互換性があるため、パッケージ(たとえばpip install python-twitter)をインストールできます。
  3. 仮想環境を使用する予定の場合(つまり、Pythonプログラムを開発しており、各プログラムに専用のクリーンなPython環境を持ち、それらを簡単に切り替えることができるようにしたい場合)、CanopyよりもAnacondaをお勧めします。仮想環境管理ツール。これはあなたを作るでしょう

関連情報