Apakah mungkin untuk menginstal versi lain dari Python ke Virtualenv?

146

Saya memiliki akun bersama di web-hosting yang memasang Python 2.4, tetapi kode saya tidak kompatibel dengan 2.4. Apakah mungkin untuk menginstal Python 2.6 langsung ke Virtualenv?

Catatan: Saya tidak memiliki izin untuk menginstalnya di server bersama.

André
sumber

Jawaban:

253

Berikut adalah opsi untuk 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) Yang ingin Anda lakukan adalah menginstal python ke direktori yang dapat Anda tulis juga.

Anda bisa mengikuti instruksinya here.

Untuk 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) Instal 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) Buat virtualenv menggunakan python lokal Anda
virtualenv docs

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

4) Aktifkan lingkungan

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

5) Periksa

(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
sumber
14
writeup brilian! dua komentar: 1. saya tidak harus melakukan make cleansebelum melakukan ./configure --prefix=/home/<user>/.localpythonternyata make cleanmengembalikan kesalahan. 2. virtualenv name -p=/python/pathtidak berhasil, bukannya virtualenv name -p /python/pathberhasil. Saya menganggap itu ke versi virtualenv. Bersulang!
zzart
1
Saya dipenjara dari gcc tetapi dapat menggunakan ActiveState Python sebagai gantinya dalam langkah 1: docs.activestate.com/activepython/2.7/…
Scott Stafford
3
Berikut adalah daftar modul yang perlu Anda instal (pada debian) untuk membuatnya bekerja sedekat mungkin dengan instalasi penuh:curl gcc build-essential libncursesw5-dev libreadline5-dev libssl-dev libgdm-dev libbz2-dev libc6-dev libsqlite3-dev tk-dev
Claudiu
1
Nitpick: sourceadalah bashism. Setara dengan POSIX adalah ..
l0b0
4
Saya menemukan bahwa melakukan ini banyak modul dasar tidak ada
user299709
20

Prasyarat:

  1. sudo easy_install virtualenv
  2. sudo pip install virtualenvwrapper

Menginstal virtualenv dengan Python2.6:

  1. Anda bisa mengunduh, membuat, dan memasang versi Python ke /usr/localatau ke lokasi lain secara manual .

  2. Jika bukan lokasi lain /usr/local, tambahkan ke PATH Anda.

  3. Muat ulang shell Anda untuk mengambil PATH yang diperbarui.

  4. Mulai saat ini, Anda harus dapat memanggil 2 biner python berikut dari shell Anda python2.5danpython2.6

  5. Buat instance baru virtualenv dengan python2.6:

    mkvirtualenv --python=python2.6 yournewenv

Thierry Lam
sumber
4
Saya pikir perintah mkvirtualenv hanya bekerja ketika Anda menginstal virtualenvwrapper.
DTing
4

Prosedur ini menginstal Python2.7 di mana saja dan menghilangkan referensi path absolut dalam envfolder Anda (dikelola oleh virtualenv) . Bahkan virtualenv tidak diinstal secara absolut.

Dengan demikian, secara teoritis, Anda dapat menjatuhkan direktori tingkat atas ke dalam tarball, mendistribusikan, dan menjalankan apa pun yang dikonfigurasikan dalam tarball pada mesin yang tidak memiliki Python (atau dependensi) yang diinstal.

Hubungi saya jika ada pertanyaan. Ini hanya bagian dari proyek berkelanjutan yang lebih besar yang saya rekayasa. Sekarang, untuk drop ...

  1. Atur folder lingkungan.

    $ mkdir env
    $ mkdir pyenv
    $ mkdir dep
  2. Dapatkan Python-2.7.3, dan virtualenv tanpa instalasi root OS apa pun.

    $ 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. Ekstrak dan instal Python-2.7.3 ke dalam pyenvdir. make cleanadalah opsional jika Anda melakukan ini ke-2, ke-3, ke-9 ...

    $ 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. Buat virtualenv Anda

    $ dep/virtualenv.py --python=/path/to/pyenv/bin/python --verbose env
  5. Perbaiki symlink ke python2.7 di dalamnya env/include/

    $ ls -l env/include/
    $ cd !$
    $ rm python2.7
    $ ln -s ../../pyenv/include/python2.7 python2.7
    $ cd ../../
  6. Perbaiki symlink python yang tersisa di env. Anda harus menghapus direktori yang terhubung secara simbolis dan membuatnya kembali, seperti di atas. Juga, inilah sintaks untuk memaksa pembuatan tautan simbolik di tempat.

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

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

Aloha.

azatar
sumber
1
Langkah 4 perlu modul pip sepertinya. Mencoba dengan Python 2.7.9 terbaru.
Roman Susi
1
Mencoba melalui ini, jawaban yang sangat tidak lengkap dengan banyak kesalahan.
Alex R
4

Saya menggunakan virtualenvwrapper dan tidak ingin mengubah $ PATH, berikut caranya:

$ which python3
/usr/local/bin/python3

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

Pendekatan yang biasa adalah mengunduh sumber dan membangun dan menginstal secara lokal (tetapi tidak secara langsung dalam virtualenv), dan kemudian membuat virtualenv baru menggunakan instal Python lokal itu. Pada beberapa sistem, dimungkinkan untuk mengunduh dan menginstal python prebuilt, daripada membangun dari sumber.


sumber
3

Sekarang, cara termudah yang saya temukan untuk memiliki versi Python yang lebih baru adalah menginstalnya melalui conda ke lingkungan conda.


Instal conda (Anda mungkin memerlukan virtualenv untuk ini)

pip install conda

Menginstal versi Python baru di dalam conda environment

Saya menambahkan jawaban ini di sini karena tidak diperlukan pengunduhan manual. condaakan melakukannya untuk Anda.

Sekarang buat lingkungan untuk versi Python yang Anda inginkan. Dalam contoh ini saya akan menggunakan 3.5.2, karena ini adalah versi terbaru saat penulisan ini (Agustus 2016).

conda create -n py35 python=3.5.2

Akan menciptakan lingkungan bagi conda untuk menginstal paket


Untuk mengaktifkan lingkungan ini (saya mengasumsikan linux jika tidak memeriksa conda docs ):

source activate py35

Sekarang instal apa yang Anda butuhkan baik melalui pip atau conda di lingkungan (conda memiliki dukungan paket biner yang lebih baik).

conda install <package_name>
Bryce Guinta
sumber
2

Anda dapat menggunakan pyenv.

Ada banyak versi yang berbeda anaconda, jython, pypy, dan sebagainya ...

https://github.com/yyuu/pyenv

Instalasi sesederhana 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
sumber
1

Meskipun pertanyaan secara khusus menjelaskan tentang menginstal 2.6, saya ingin menambahkan beberapa poin penting pada jawaban yang sangat baik di atas jika seseorang menemukan ini. Sebagai catatan, kasus saya adalah saya mencoba menginstal 2.7 pada kotak ubuntu 10.04.

Pertama, motivasi saya terhadap metode yang dijelaskan dalam semua jawaban di sini adalah bahwa menginstal Python dari ppa deadsnake telah gagal total. Jadi membangun Python lokal adalah caranya.

Setelah mencobanya, saya pikir mengandalkan instalasi default pip (with sudo apt-get install pip) akan memadai. Sayangnya ini salah. Ternyata saya mendapatkan semua masalah pendek yang buruk dan akhirnya tidak bisa membuat virtualenv.

Oleh karena itu, saya sangat merekomendasikan untuk menginstal pip secara lokal dengan wget https://raw.github.com/pypa/pip/master/contrib/get-pip.py && python get-pip.py --user. Pertanyaan terkait ini memberi saya petunjuk ini.

Sekarang jika ini tidak berhasil, pastikan libssl-devuntuk Ubuntu atau openssl-devuntuk CentOS diinstal. Instal mereka dengan apt-getatau yumdan kemudian membangun kembali Python (tidak perlu menghapus apa pun jika sudah diinstal, lakukan di atas). get-pipmengeluh tentang itu, Anda dapat memeriksanya dengan menjalankan import sslshell py.

Terakhir, jangan lupa untuk mendeklarasikan .local/bindan python lokal untuk path, periksa dengan which pipdan which python.

Wtower
sumber
1

Panduan lengkap dengan pyenv

Jika pyenv tidak diinstal maka instal dengan pyenv-installer :

$ curl https://pyenv.run | bash

Untuk menggunakan versi python khusus, mis. 3.5.6Gunakan yang berikut:

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

Tidak, tetapi Anda dapat menginstal bangunan Python yang terisolasi (seperti ActivePython ) di bawah $HOMEdirektori Anda .

Pendekatan ini adalah yang tercepat , dan tidak mengharuskan Anda untuk mengkompilasi Python sendiri.

(sebagai bonus, Anda juga bisa menggunakan manajer paket biner ActiveState )

Sridhar Ratnakumar
sumber
Sebenarnya false as virtualenv dapat menginstal versi Python lain.
Raito
0

Saya belum menemukan jawaban yang cocok, jadi inilah yang saya ambil, yang dibangun di atas @toszter jawaban, tetapi tidak menggunakan sistem Python (dan Anda mungkin tahu, itu tidak selalu ide yang baik untuk menginstal setuptools dan virtualenv pada tingkat sistem ketika berurusan dengan banyak Konfigurasi python):

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

Trik memecahkan masalah ayam-telur di sini adalah membuat virtualenv tanpa setuptools terlebih dahulu, karena jika tidak gagal (pip tidak dapat ditemukan). Dimungkinkan untuk menginstal pip / roda secara langsung, tetapi entah bagaimana easy_install adalah hal pertama yang terlintas di pikiran saya. Juga, skrip dapat ditingkatkan dengan memperhitungkan versi konkret.

NB. Menggunakan xz dalam skrip.

Roman Susi
sumber
0

Pertama-tama, Terima kasih DTing untuk jawaban yang luar biasa. Cukup sempurna.

Bagi mereka yang menderita karena tidak memiliki akses GCC di shared hosting, Go for ActivePython bukan python normal seperti yang disebutkan Scott Stafford. Inilah perintah untuk itu.

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

Ini akan meminta Anda path ke direktori python. Memasukkan

../../.localpython

Cukup ganti di atas sebagai Langkah 1 dalam jawaban DTing dan lanjutkan dengan Langkah 2 setelah itu. Harap perhatikan bahwa URL paket ActivePython dapat berubah dengan rilis baru. Anda selalu dapat memperoleh URL baru dari sini: http://www.activestate.com/activepython/downloads

Berdasarkan URL Anda perlu mengubah nama tar dan perintah cd berdasarkan file yang diterima.

Dhrumil Bhankhar
sumber