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


21

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をデフォルトにしたいのです。この混乱を修正するにはどうすればよいですか?

回答:


16

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

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

これを行う正しい方法は、希望するバージョンのpythonをインストールし、.bash_profile、パスなどを設定して、使用するユーザーアカウントを設定することです。Pythonのvirtualenvモジュールも調べてください。


1
ここで私の方法をグーグル。このスタックの担当者がいた場合、-1になります。どうして?提案されたアプローチでは、「好みのバージョンのpythonをインストールする」だけであるためです。システムpythonをホースなしでどのように行うのですか?
ジェズ

@jezユーザーは、選択したアプリケーションとOSの組み合わせのインストール手順を参照する必要があります。一般に、言語インストーラパッケージは、コアOSコンポーネントを上書きするのではなく、良性の場所にインストールするため、OSバージョンを上書きするのは特別な場合です。
サイモンヒッブス

8

この混乱を修正するにはどうすればよいですか?

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

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

あなたが持つことを主張した場合python2.7、システム全体のデフォルトとして、Ubuntuの(現在はそれのUbuntuの11.04、コードネームナッティ)の以降のリリースを使用しています。そのバージョンをデフォルトとして使用します。

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


アップグレードしたら、デフォルトのPythonインストールを変更するのが妥当だと思いました。新しいpythonをデフォルトとして使用するため、デフォルトとして使用します。pythonbashから入力するとき、新しいpythonを取得します。これを行うより良い方法はありますか?
ripper234

ただ注意してください-python 2.7のインストール方法に問題はなかったと思います。唯一の「非正統的な」動きは、シンボリックリンクを変更することでした。これはデフォルトとしてそれを設定する適切な方法だと思いまし。もっと良い方法はありますか?
ripper234

2
@ripper:私はこのスレッドに少し遅れて来ていると思います。Tshepangが言うように、pythonUbuntu のパッケージがシステムバージョンを決定します。これで、インストールをカスタマイズして、Python 2.7がデフォルトで独自のpythonパッケージなどを作成できるようになりましたが、そうであれば、UbuntuではなくPythonインストールのメンテナーになり、Pythonの仕組みを学ぶ必要がありますDebian / Ubuntuで管理されています。システム内の他のPythonパッケージはデフォルトとして2.6で動作するように設定されているため、他のものとは別に、破損が発生する可能性があることに注意してください。
ファヒムミタ

1
@Tshepang:良いまとめです!
ファヒムミタ

12
@ ripper234:で何も変更しない/usr/binでください。これはディストリビューション用に予約されています。代わりに、/usr/local/bin/pythonへのシンボリックリンクを作成しpython2.7ます。次に、#!/usr/bin/env python(推奨されるイディオム)を使用したスクリプトとpythonコマンドラインでの入力により、Python 2.7が実行されます。ディストリビューションのPythonが必要なディストリビューションのスクリプトは、呼び出しを続けることができ#!/usr/bin/pythonます。
ジル 'SO-悪であるのをやめる'

2

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

/programming/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 /」ディレクトリで、次の操作を行います(ん、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バージョンを終了するには、「deactivate」と入力します


0

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

  1. システムのpythonを無秩序のままにしておきます。決して使用しないでください。

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

    • キャノピーはpip、パッケージをインストールできるPyPiパッケージマネージャーコマンド(たとえばpip install python-twitter
  3. 仮想環境の使用を計画している場合(つまり、Pythonプログラムを開発しており、それぞれを専用のクリーンなPython環境に切り替えたい場合)、仮想環境マネージャーツールのため、CanopyよりもAnacondaをお勧めします。これにより、

0

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バージョン文字列を含むファイルを作成します。

そして、私たちのプロジェクトのためだけにローカルにパッケージをインストールしましょう

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

pyenv local

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

関連するスレッド:

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.