Ist es möglich, eine andere Version von Python auf Virtualenv zu installieren?

146

Ich habe ein freigegebenes Konto in einem Webhosting, auf dem Python 2.4 installiert ist, aber mein Code ist nicht mit 2.4 kompatibel. Ist es möglich, Python 2.6 direkt auf Virtualenv zu installieren?

Hinweis: Ich habe keine Berechtigung, es auf dem freigegebenen Server zu installieren.

André
quelle

Antworten:

253

Hier sind die Optionen für virtualenv

$ virtualenv
You must provide a DEST_DIR
Usage: virtualenv [OPTIONS] DEST_DIR

Options:
  --version             show program's version number and exit.
  -h, --help            show this help message and exit.
  -v, --verbose         Increase verbosity.
  -q, --quiet           Decrease verbosity.
  -p PYTHON_EXE, --python=PYTHON_EXE
                        The Python interpreter to use, e.g.,
                        --python=python2.5 will use the python2.5 interpreter
                        to create the new environment.  The default is the
                        interpreter that virtualenv was installed with
                        (/usr/bin/python)
  --clear               Clear out the non-root install and start from scratch
  --no-site-packages    Don't give access to the global site-packages dir to
                        the virtual environment
  --unzip-setuptools    Unzip Setuptools or Distribute when installing it
  --relocatable         Make an EXISTING virtualenv environment relocatable.
                        This fixes up scripts and makes all .pth files
                        relative
  --distribute          Use Distribute instead of Setuptools. Set environ
                        variable VIRTUALENV_USE_DISTRIBUTE to make it the
                        default
  --prompt==PROMPT      Provides an alternative prompt prefix for this
                        environment

1) Sie möchten Python in einem Verzeichnis installieren, das Sie auch schreiben können.

Sie können den Anweisungen folgen here.

Für Python 2.7.1
Python source

mkdir ~/src
mkdir ~/.localpython
cd ~/src
wget http://www.python.org/ftp/python/2.7.1/Python-2.7.1.tgz
tar -zxvf Python-2.7.1.tgz
cd Python-2.7.1

make clean
./configure --prefix=/home/${USER}/.localpython
make
make install

2) Installieren Sie virtualenv
virtualenv source

cd ~/src
wget http://pypi.python.org/packages/source/v/virtualenv/virtualenv-1.5.2.tar.gz#md5=fbcefbd8520bb64bc24a560c6019a73c
tar -zxvf virtualenv-1.5.2.tar.gz
cd virtualenv-1.5.2/
~/.localpython/bin/python setup.py install

3) Erstellen Sie eine virtuelle Umgebung mit Ihrer lokalen Python
virtualenv docs

mkdir /home/${USER}/virtualenvs
cd /home/${USER}/virtualenvs
~/.localpython/bin/virtualenv py2.7 --python=/home/${USER}/.localpython/bin/python2.7

4) Aktivieren Sie die Umgebung

cd ~/virtualenvs/py2.7/bin
source ./activate

5) Überprüfen

(py2.7)$ python
Python 2.7.1 (r271:86832, Mar 31 2011, 15:31:37) 
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> exit()

(py2.7)$ deactivate
$ python
Python 2.6.6 (r266:84292, Sep 15 2010, 15:52:39) 
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 
DTing
quelle
14
brillante Zusammenfassung! Zwei Kommentare: 1. Ich musste nicht tun, make cleanbevor ich ./configure --prefix=/home/<user>/.localpythontatsächlich einen make cleanFehler zurückgab. 2. virtualenv name -p=/python/pathhat nicht funktioniert statt virtualenv name -p /python/pathhat funktioniert. Ich gehe davon aus, dass es an der virtualenv-Version liegt. Prost!
Zzart
1
Ich hatte kein JCC mehr im Gefängnis, konnte aber stattdessen ActiveState Python in Schritt 1 verwenden: docs.activestate.com/activepython/2.7/…
Scott Stafford
3
Hier ist eine Liste der Module, die Sie installiert haben müssen (auf Debian), damit dies so nahe wie möglich an einer vollständigen Installation funktioniert:curl gcc build-essential libncursesw5-dev libreadline5-dev libssl-dev libgdm-dev libbz2-dev libc6-dev libsqlite3-dev tk-dev
Claudiu
1
Nitpick: sourceist ein Bashismus. Das POSIX-Äquivalent ist ..
10b0
4
Ich finde, dass so viele Grundmodule fehlen
user299709
20

Voraussetzungen:

  1. sudo easy_install virtualenv
  2. sudo pip install virtualenvwrapper

Virtualenv mit Python2.6 installieren:

  1. Sie können eine andere Version von Python manuell an einen /usr/localanderen Ort herunterladen, erstellen und installieren .

  2. Wenn es sich um einen anderen Ort als handelt /usr/local, fügen Sie ihn Ihrem PFAD hinzu.

  3. Laden Sie Ihre Shell neu, um den aktualisierten Pfad aufzunehmen.

  4. Ab diesem Zeitpunkt sollten Sie in der Lage sein, die folgenden 2 Python-Binärdateien von Ihrer Shell python2.5und aufzurufenpython2.6

  5. Erstellen Sie eine neue Instanz von virtualenv mit python2.6:

    mkvirtualenv --python=python2.6 yournewenv

Thierry Lam
quelle
4
Ich denke, der Befehl mkvirtualenv funktioniert nur, wenn Sie virtualenvwrapper installiert haben.
DTing
4

Diese Prozedur installiert Python2.7 überall und entfernt alle absoluten Pfadreferenzen in Ihrem envOrdner (verwaltet von virtualenv) . Auch virtualenv ist nicht unbedingt installiert.

Theoretisch können Sie das Verzeichnis der obersten Ebene in einem Tarball ablegen, alles, was im Tarball konfiguriert ist, auf einem Computer verteilen und ausführen, auf dem Python (oder Abhängigkeiten) nicht installiert ist.

Kontaktieren Sie mich bei Fragen. Dies ist nur ein Teil eines laufenden, größeren Projekts, das ich gerade entwickle. Nun zum Tropfen ...

  1. Richten Sie Umgebungsordner ein.

    $ mkdir env
    $ mkdir pyenv
    $ mkdir dep
  2. Holen Sie sich Python-2.7.3 und virtualenv ohne jegliche Installation des Root-Betriebssystems.

    $ cd dep
    $ wget http://www.python.org/ftp/python/2.7.3/Python-2.7.3.tgz
    $ wget https://raw.github.com/pypa/virtualenv/master/virtualenv.py
  3. Extrahieren und installieren Sie Python-2.7.3 im Verzeichnis pyenv. make cleanist optional, wenn Sie dies zum 2., 3., N-ten Mal tun ...

    $ tar -xzvf Python-2.7.3.tgz
    $ cd Python-2.7.3
    $ make clean
    $ ./configure --prefix=/path/to/pyenv
    $ make && make install
    $ cd ../../
    $ ls
    dep    env    pyenv
  4. Erstellen Sie Ihre virtuelle Umgebung

    $ dep/virtualenv.py --python=/path/to/pyenv/bin/python --verbose env
  5. Korrigieren Sie den Symlink zu python2.7 innerhalb env/include/

    $ ls -l env/include/
    $ cd !$
    $ rm python2.7
    $ ln -s ../../pyenv/include/python2.7 python2.7
    $ cd ../../
  6. Korrigieren Sie die verbleibenden Python-Symlinks in env. Sie müssen die symbolisch verknüpften Verzeichnisse löschen und wie oben beschrieben neu erstellen. Hier ist auch die Syntax, um die direkte symbolische Linkerstellung zu erzwingen.

    $ ls -l env/lib/python2.7/
    $ cd !$
    $ ln -sf ../../../pyenv/lib/python2.7/UserDict.py UserDict.py
    [...repeat until all symbolic links are relative...]
    $ cd ../../../
  7. Prüfung

    $ python --version
    Python 2.7.1
    $ source env/bin/activate
    (env)
    $ python --version
    Python 2.7.3

Aloha.

Azatar
quelle
1
Schritt 4 benötigt anscheinend ein Pip-Modul. Versucht mit dem neuesten Python 2.7.9.
Roman Susi
1
Ich habe versucht, diese sehr unvollständige Antwort mit vielen Fehlern durchzugehen.
Alex R
4

Ich verwende virtualenvwrapper und möchte $ PATH nicht ändern. So geht's:

$ which python3
/usr/local/bin/python3

$ mkvirtualenv --python=/usr/local/bin/python3 env_name
laike9m
quelle
3

Der übliche Ansatz besteht darin, die Quelle herunterzuladen und lokal (aber nicht direkt in virtualenv) zu erstellen und zu installieren und dann mit dieser lokalen Python-Installation eine neue virtualenv zu erstellen. Auf einigen Systemen ist es möglicherweise möglich, eine vorgefertigte Python herunterzuladen und zu installieren, anstatt sie aus dem Quellcode zu erstellen.


quelle
3

Heutzutage ist es für mich am einfachsten, eine aktualisierte Version von Python zu finden, sie über conda in einer conda-Umgebung zu installieren.


Installieren Sie conda (möglicherweise benötigen Sie dafür eine virtuelle Umgebung)

pip install conda

Installieren einer neuen Python-Version in einer Conda-Umgebung

Ich füge diese Antwort hier hinzu, da kein manueller Download erforderlich ist. condawerde das für dich tun.

Erstellen Sie nun eine Umgebung für die gewünschte Python-Version. In diesem Beispiel werde ich verwenden 3.5.2, da es sich um die neueste Version zum Zeitpunkt des Schreibens handelt (August 2016).

conda create -n py35 python=3.5.2

Erstellt eine Umgebung für conda, um Pakete zu installieren


So aktivieren Sie diese Umgebung (ich gehe davon aus, dass Linux ansonsten die Conda-Dokumente überprüft ):

source activate py35

Installieren Sie nun das, was Sie benötigen, entweder über pip oder conda in der Umgebung (conda bietet eine bessere Unterstützung für Binärpakete).

conda install <package_name>
Bryce Guinta
quelle
2

Sie können pyenv verwenden.

Es gibt viele verschiedene Versionen von Anaconda, Jython, Pypy und so weiter ...

https://github.com/yyuu/pyenv

Installation so einfach wie pyenv install 3.2.6

pyenv install --list
Available versions:
  2.1.3
  2.2.3
  2.3.7
  2.4
  2.4.1
  2.4.2
  2.4.3
  2.4.4
  2.4.5
  2.4.6
  2.5
  2.5.1
  2.5.2
  2.5.3
  2.5.4
  2.5.5
  2.5.6
  2.6.6

...

Ezhik
quelle
1

Obwohl die Frage speziell die Installation von 2.6 beschreibt, möchte ich einige wichtige Punkte zu den hervorragenden Antworten oben hinzufügen, falls jemand darauf stößt. Mein Fall war, dass ich versucht habe, 2.7 auf einer Ubuntu 10.04-Box zu installieren.

Erstens ist meine Motivation für die in allen Antworten hier beschriebenen Methoden, Python von Deadsnakes ppas zu installieren ein totaler Fehler war. Das Erstellen eines lokalen Python ist also der richtige Weg.

Nachdem ich es versucht hatte, dachte ich, dass sudo apt-get install pipes angemessen wäre, sich auf die Standardinstallation von pip (with ) zu verlassen. Das ist leider falsch. Es stellte sich heraus, dass ich alle kurzen Probleme hatte und schließlich nicht in der Lage war, eine virtuelle Umgebung zu erstellen.

Daher empfehle ich dringend, pip lokal mit zu installierenwget https://raw.github.com/pypa/pip/master/contrib/get-pip.py && python get-pip.py --user . Diese verwandte Frage gab mir diesen Hinweis.

Wenn dies nicht funktioniert, stellen Sie sicher, dass libssl-devfür Ubuntu oder openssl-devfür CentOS installiert ist. Installieren Sie sie mit apt-getoder yumund erstellen Sie Python neu (Sie müssen nichts entfernen, wenn es bereits installiert ist, tun Sie dies oben). get-pipbeschwert sich darüber, du kannst es überprüfen, indem du rennstimport ssl auf einer Py-Shell .

Zuletzt vergessen Sie nicht, eine .local/binlokale Python zu deklarieren , mit which pipund zu überprüfen which python.

Wtower
quelle
1

Vollständige Anleitung mit Pyenv

Wenn pyenv nicht installiert ist, installieren Sie es mit pyenv-installer :

$ curl https://pyenv.run | bash

Verwenden Sie zum Verwenden einer benutzerdefinierten Python-Version z. B. 3.5.6Folgendes:

pyenv install 3.5.6
pyenv virtualenv 3.5.6 name_of_your_env
pyenv activate name_of_your_env
Daniil Mashkin
quelle
0

Nein, aber Sie können einen isolierten Python-Build (z. B. ActivePython ) in Ihrem $HOMEVerzeichnis installieren .

Dieser Ansatz ist der schnellste und erfordert nicht, dass Sie Python selbst kompilieren.

(Als Bonus können Sie auch den Binärpaket-Manager von ActiveState verwenden. )

Sridhar Ratnakumar
quelle
Eigentlich falsch, da virtualenv eine andere Python-Version installieren kann.
Raito
0

Ich habe keine passende Antwort gefunden, daher hier meine Ansicht, die auf der Antwort von @toszter aufbaut, aber kein System-Python verwendet (und Sie wissen vielleicht, dass es nicht immer eine gute Idee ist, setuptools und virtualenv auf Systemebene zu installieren, wenn Sie mit vielen arbeiten Python-Konfigurationen):

#!/bin/sh

mkdir python_ve
cd python_ve

MYROOT=`pwd`
mkdir env pyenv dep

cd ${MYROOT}/dep
wget https://pypi.python.org/packages/source/s/setuptools/setuptools-15.2.tar.gz#md5=a9028a9794fc7ae02320d32e2d7e12ee
wget https://raw.github.com/pypa/virtualenv/master/virtualenv.py
wget https://www.python.org/ftp/python/2.7.9/Python-2.7.9.tar.xz
xz -d Python-2.7.9.tar.xz

cd ${MYROOT}/pyenv
tar xf ../dep/Python-2.7.9.tar
cd Python-2.7.9
./configure --prefix=${MYROOT}/pyenv && make -j 4 && make install

cd ${MYROOT}/pyenv

tar xzf ../dep/setuptools-15.2.tar.gz

cd ${MYROOT}

pyenv/bin/python dep/virtualenv.py --no-setuptools --python=${MYROOT}/pyenv/bin/python --verbose env
env/bin/python pyenv/setuptools-15.2/setup.py install
env/bin/easy_install pip

echo "virtualenv in ${MYROOT}/env"

Der Trick, um das Hühnerei-Problem hier zu lösen, besteht darin, virtualenv zuerst ohne setuptools zu erstellen, da es sonst fehlschlägt (pip kann nicht gefunden werden). Es mag möglich sein, Pip / Wheel direkt zu installieren, aber irgendwie war easy_install das erste, was mir in den Sinn kam. Das Skript kann auch verbessert werden, indem konkrete Versionen herausgerechnet werden.

NB. Verwenden von xz im Skript.

Roman Susi
quelle
0

Zunächst einmal danke DTing für die großartige Antwort. Es ist ziemlich perfekt.

Für diejenigen, die unter GCC-Zugriff beim Shared Hosting leiden, wählen Sie ActivePython anstelle von normalem Python wie Scott Stafford. Hier sind die Befehle dafür.

wget http://downloads.activestate.com/ActivePython/releases/2.7.13.2713/ActivePython-2.7.13.2713-linux-x86_64-glibc-2.3.6-401785.tar.gz

tar -zxvf ActivePython-2.7.13.2713-linux-x86_64-glibc-2.3.6-401785.tar.gz

cd ActivePython-2.7.13.2713-linux-x86_64-glibc-2.3.6-401785

./install.sh

Sie werden nach dem Pfad zum Python-Verzeichnis gefragt. Eingeben

../../.localpython

Ersetzen Sie einfach oben als Schritt 1 in der Antwort von DTing und fahren Sie danach mit Schritt 2 fort. Bitte beachten Sie, dass sich die URL des ActivePython-Pakets mit der neuen Version ändern kann. Sie können jederzeit eine neue URL von hier abrufen : http://www.activestate.com/activepython/downloads

Basierend auf der URL müssen Sie den Namen des Befehls tar und cd basierend auf der empfangenen Datei ändern.

Dhrumil Bhankhar
quelle