Czy można zainstalować inną wersję Pythona w Virtualenv?


146

Mam wspólne konto na serwerze internetowym z zainstalowanym Pythonem 2.4, ale mój kod nie jest zgodny z wersją 2.4. Czy można zainstalować Python 2.6 bezpośrednio w Virtualenv?

Uwaga: nie mam pozwolenia na zainstalowanie go na udostępnionym serwerze.

Odpowiedzi:


253

Oto opcje dla 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) To, co chcesz zrobić, to zainstalować Pythona w katalogu, w którym możesz pisać.

Możesz postępować zgodnie z instrukcjami here.

W przypadku Pythona 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) Zainstaluj 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) Utwórz virtualenv za pomocą lokalnego języka Python
virtualenv docs

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

4) Aktywuj środowisko

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

5) Sprawdź

(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.
>>> 

14
genialny napis! dwa komentarze: 1. nie musiałem robić, make cleanzanim ./configure --prefix=/home/<user>/.localpythonfaktycznie make cleanzwróciłem błąd. 2. virtualenv name -p=/python/pathnie działało, zamiast tego virtualenv name -p /python/pathdziałało. Zakładam, że wszystko zależy od wersji virtualenv. Twoje zdrowie!
zzart

1
Zostałem po jailshellu z gcc, ale mogłem zamiast tego użyć ActiveState Python w kroku 1: docs.activestate.com/activepython/2.7/…
Scott Stafford

3
Oto lista modułów, które musisz zainstalować (na Debianie), aby to działało jak najbliżej pełnej instalacji:curl gcc build-essential libncursesw5-dev libreadline5-dev libssl-dev libgdm-dev libbz2-dev libc6-dev libsqlite3-dev tk-dev
Claudiu

1
Nitpick: sourceto bashism. Odpowiednik POSIX to ..
l0b0

4
Uważam, że podczas wykonywania tej operacji brakuje wielu podstawowych modułów
użytkownik299709

20

Wymagania wstępne:

  1. sudo easy_install virtualenv
  2. sudo pip install virtualenvwrapper

Instalowanie virtualenv w Pythonie2.6:

  1. Możesz ręcznie pobrać, skompilować i zainstalować inną wersję Pythona do /usr/locallub innej lokalizacji.

  2. Jeśli jest to inna lokalizacja niż /usr/local, dodaj ją do ścieżki PATH.

  3. Załaduj ponownie powłokę, aby pobrać zaktualizowaną ścieżkę.

  4. Od tego momentu powinieneś być w stanie wywołać następujące 2 pliki binarne Pythona ze swojej powłoki python2.5ipython2.6

  5. Utwórz nową instancję virtualenv za pomocą python2.6:

    mkvirtualenv --python=python2.6 yournewenv


4
Myślę, że polecenie mkvirtualenv działa tylko wtedy, gdy masz zainstalowany virtualenvwrapper.
DTing

4

Ta procedura instaluje Python 2.7 w dowolnym miejscu i eliminuje wszelkie bezwzględne odniesienia do ścieżek w envfolderze (zarządzanym przez virtualenv) . Nawet virtualenv nie jest zainstalowany absolutnie.

Zatem teoretycznie możesz upuścić katalog najwyższego poziomu do paczki, rozprowadzać i uruchamiać wszystko skonfigurowane w tarballu na maszynie, która nie ma zainstalowanego Pythona (ani żadnych zależności) .

Kontaktuj się ze mną w razie pytań. To tylko część trwającego, większego projektu, który tworzę. Teraz do kropli ...

  1. Skonfiguruj foldery środowiskowe.

    $ mkdir env
    $ mkdir pyenv
    $ mkdir dep
  2. Pobierz Python-2.7.3 i virtualenv bez jakiejkolwiek instalacji systemu operacyjnego root.

    $ 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. Rozpakuj i zainstaluj Python-2.7.3 w katalogu pyenv. make cleanjest opcjonalne, jeśli robisz to po raz drugi, trzeci, n-ty ...

    $ 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. Stwórz swój virtualenv

    $ dep/virtualenv.py --python=/path/to/pyenv/bin/python --verbose env
  5. Napraw link symboliczny do python2.7 w env/include/

    $ ls -l env/include/
    $ cd !$
    $ rm python2.7
    $ ln -s ../../pyenv/include/python2.7 python2.7
    $ cd ../../
  6. Napraw pozostałe linki symboliczne Pythona w env. Będziesz musiał usunąć katalogi połączone symbolicznie i odtworzyć je, jak powyżej. Oto składnia wymuszająca tworzenie dowiązań symbolicznych w miejscu.

    $ 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. Test

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

Aloha.


1
Wydaje się, że krok 4 wymaga modułu pip. Próbowałem z najnowszym Pythonem 2.7.9.
Roman Susi

1
Próbowałem przejść przez tę, bardzo niepełną odpowiedź z wieloma błędami.
Alex R

4

Używam virtualenvwrapper i nie chcę modyfikować $ PATH, oto jak:

$ which python3
/usr/local/bin/python3

$ mkvirtualenv --python=/usr/local/bin/python3 env_name

3

Typowe podejście polega na pobraniu źródła, skompilowaniu i zainstalowaniu lokalnie (ale nie bezpośrednio w virtualenv), a następnie utworzeniu nowego virtualenv przy użyciu tej lokalnej instalacji Pythona. W niektórych systemach możliwe jest pobranie i zainstalowanie wstępnie skompilowanego języka Python zamiast budowania ze źródła.


3

Obecnie najłatwiejszym sposobem, w jaki znalazłem bardziej zaktualizowaną wersję Pythona, jest zainstalowanie jej przez Conda w środowisku Conda.


Zainstaluj condę (możesz potrzebować do tego virtualenv)

pip install conda

Instalowanie nowej wersji Pythona w środowisku Conda

Dodaję tę odpowiedź tutaj, ponieważ nie jest potrzebne ręczne pobieranie. condazrobi to za Ciebie.

Teraz utwórz środowisko dla żądanej wersji Pythona. W tym przykładzie użyję 3.5.2, ponieważ jest to najnowsza wersja w chwili pisania (sierpień 2016).

conda create -n py35 python=3.5.2

Stworzy środowisko dla Conda do instalowania pakietów


Aby aktywować to środowisko ( zakładam, że Linux w przeciwnym razie sprawdź dokumentację Conda ):

source activate py35

Teraz zainstaluj to, czego potrzebujesz, za pomocą pip lub conda w środowisku (conda ma lepszą obsługę pakietów binarnych).

conda install <package_name>

2

Możesz użyć pyenv.

Istnieje wiele różnych wersji anaconda, jython, pypy i tak dalej ...

https://github.com/yyuu/pyenv

Instalacja tak prosta, jak 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

...


1

Chociaż pytanie konkretnie opisuje instalację 2.6, chciałbym dodać kilka ważnych punktów do doskonałych odpowiedzi powyżej, na wypadek gdyby ktoś zetknął się z tym. Dla przypomnienia, moim przypadkiem było to, że próbowałem zainstalować 2.7 na pudełku Ubuntu 10.04.

Po pierwsze, moją motywacją do metod opisanych we wszystkich odpowiedziach jest to, że instalowanie Pythona z ppa Deadsnake'a zakończyła się całkowitą porażką. Tak więc budowanie lokalnego języka Python jest drogą do zrobienia.

Próbując tak, pomyślałem, że oparcie się na domyślnej instalacji pip (with sudo apt-get install pip) będzie wystarczające. Niestety jest to błędne. Okazało się, że dostaję mnóstwo paskudnych problemów i ostatecznie nie jestem w stanie stworzyć virtualenv.

Dlatego bardzo polecam lokalną instalację pip z wget https://raw.github.com/pypa/pip/master/contrib/get-pip.py && python get-pip.py --user. To powiązane pytanie dało mi tę wskazówkę.

Teraz, jeśli to nie zadziała, upewnij się, że jest zainstalowany system libssl-devUbuntu lub openssl-devCentOS. Zainstaluj je za pomocą apt-getlub, yuma następnie ponownie skompiluj Pythona (nie musisz niczego usuwać, jeśli jest już zainstalowany, zrób to na górze). get-pipnarzeka na to, możesz to sprawdzić, uruchamiającimport ssl na powłoce py.

Na koniec nie zapomnij zadeklarować .local/bini lokalnego Pythona do ścieżki, sprawdź za pomocą which pipi which python.


1

Pełny przewodnik z pyenv

Jeśli pyenv nie jest zainstalowany, zainstaluj go za pomocą pyenv-installera :

$ curl https://pyenv.run | bash

Aby użyć dowolnej niestandardowej wersji Pythona, na przykład 3.5.6użyj następującego:

pyenv install 3.5.6
pyenv virtualenv 3.5.6 name_of_your_env
pyenv activate name_of_your_env

0

Nie, ale możesz zainstalować izolowaną kompilację Pythona (taką jak ActivePython ) w swoim $HOMEkatalogu.

To podejście jest najszybsze i nie wymaga samodzielnego kompilowania Pythona.

(jako bonus możesz również użyć menedżera pakietów binarnych ActiveState )


Właściwie fałszywe, ponieważ virtualenv może zainstalować inną wersję Pythona.
Raito,

0

Nie znalazłem odpowiedniej odpowiedzi, więc oto moja opinia, która opiera się na odpowiedzi @toszter, ale nie korzysta z systemu Python (i możesz wiedzieć, nie zawsze jest dobrym pomysłem instalowanie setuptools i virtualenv na poziomie systemu, gdy masz do czynienia z wieloma Konfiguracje Pythona):

#!/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"

Sztuczka polegająca na rozwiązaniu problemu z jajkiem kurzego polega na tym, aby najpierw utworzyć virtualenv bez setuptools, ponieważ w przeciwnym razie zawodzi (nie można znaleźć pip). Możliwe jest bezpośrednie zainstalowanie pip / wheel, ale w jakiś sposób easy_install była pierwszą rzeczą, która przyszła mi do głowy. Skrypt można również ulepszyć, uwzględniając konkretne wersje.

NB. Używanie xz w skrypcie.


0

Przede wszystkim dziękuję DTing za świetną odpowiedź. Jest prawie doskonały.

Dla tych, którzy cierpią z powodu braku dostępu do GCC w hostingu współdzielonym, wybierz ActivePython zamiast zwykłego Pythona, o którym wspomniał Scott Stafford. Oto polecenia do tego.

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

Zapyta Cię o ścieżkę do katalogu Pythona. Wchodzić

../../.localpython

Po prostu zamień powyższe na Krok 1 w odpowiedzi DTing, a następnie przejdź do kroku 2. Należy pamiętać, że adres URL pakietu ActivePython może ulec zmianie wraz z nową wersją. Zawsze możesz uzyskać nowy adres URL stąd: http://www.activestate.com/activepython/downloads

Na podstawie adresu URL musisz zmienić nazwę polecenia tar i cd na podstawie otrzymanego pliku.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.