Có thể cài đặt phiên bản Python khác lên Virtualenv không?


146

Tôi có một tài khoản được chia sẻ trong một máy chủ lưu trữ web đã cài đặt Python 2.4, nhưng mã của tôi không tương thích với 2.4. Có thể cài đặt Python 2.6 trực tiếp vào Virtualenv không?

Lưu ý: Tôi không được phép cài đặt nó trong máy chủ dùng chung.

Câu trả lời:


253

Dưới đây là các tùy chọn cho 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) Những gì bạn muốn làm là cài đặt python vào một thư mục mà bạn có thể viết quá.

Bạn có thể làm theo hướng dẫn here.

Đối với 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) Cài đặt 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) Tạo virtualenv bằng python cục bộ của bạn
virtualenv docs

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

4) Kích hoạt môi trường

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

5) Kiểm tra

(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
viết tuyệt vời! hai ý kiến ​​mặc dù: 1. tôi không phải làm make cleantrước khi ./configure --prefix=/home/<user>/.localpythonthực tế make cleantrả lại lỗi. 2. virtualenv name -p=/python/pathđã không làm việc thay vì virtualenv name -p /python/pathđã làm việc. Tôi giả sử nó xuống phiên bản virtualenv. chúc mừng
zzart

1
Tôi đã thoát khỏi gcc nhưng đã có thể sử dụng ActiveState Python thay vào bước 1: docs.activestate.com/activepython/2.7/ trên
Scott Stafford

3
Dưới đây là danh sách các mô-đun bạn cần cài đặt (trên debian) để làm cho nó hoạt động gần với cài đặt đầy đủ nhất có thể:curl gcc build-essential libncursesw5-dev libreadline5-dev libssl-dev libgdm-dev libbz2-dev libc6-dev libsqlite3-dev tk-dev
Claudiu

1
Nitpick: sourcelà một bashism. Tương đương POSIX là ..
l0b0

4
Tôi thấy rằng việc thực hiện rất nhiều mô-đun cơ bản này bị thiếu
user299709

20

Điều kiện tiên quyết:

  1. sudo easy_install virtualenv
  2. sudo pip install virtualenvwrapper

Cài đặt virtualenv với Python2.6:

  1. Bạn có thể tự tải xuống, xây dựng và cài đặt phiên bản Python khác tới /usr/localhoặc một vị trí khác.

  2. Nếu đó là một vị trí khác ngoài /usr/local, hãy thêm nó vào ĐƯỜNG của bạn.

  3. Tải lại shell của bạn để nhận PATH cập nhật.

  4. Từ thời điểm này, bạn sẽ có thể gọi 2 nhị phân trăn sau từ vỏ của mình python2.5python2.6

  5. Tạo một phiên bản mới của virtualenv với python2.6:

    mkvirtualenv --python=python2.6 yournewenv


4
Tôi nghĩ rằng lệnh mkvirtualenv chỉ hoạt động khi bạn đã cài đặt virtualenvwrapper.
DT

4

Quy trình này cài đặt Python2.7 ở mọi nơi và loại bỏ mọi tham chiếu đường dẫn tuyệt đối trong envthư mục của bạn (được quản lý bởi virtualenv) . Ngay cả virtualenv cũng không được cài đặt hoàn toàn.

Do đó, về mặt lý thuyết, bạn có thể thả thư mục cấp cao nhất vào tarball, phân phối và chạy mọi thứ được định cấu hình trong tarball trên máy không cài đặt Python (hoặc bất kỳ phụ thuộc nào) .

liên lạc với tôi với bất kì câu hỏi nào. Đây chỉ là một phần của một dự án lớn hơn đang diễn ra mà tôi đang thiết kế. Bây giờ, cho thả ...

  1. Thiết lập thư mục môi trường.

    $ mkdir env
    $ mkdir pyenv
    $ mkdir dep
  2. Nhận Python-2.7.3 và virtualenv mà không cần bất kỳ hình thức cài đặt hệ điều hành gốc nào.

    $ 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. Giải nén và cài đặt Python-2.7.3 vào pyenvthư mục. make cleanlà tùy chọn nếu bạn đang thực hiện việc này lần thứ 2, 3, N ...

    $ 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. Tạo virtualenv của bạn

    $ dep/virtualenv.py --python=/path/to/pyenv/bin/python --verbose env
  5. Sửa lỗi symlink thành python2.7 trong env/include/

    $ ls -l env/include/
    $ cd !$
    $ rm python2.7
    $ ln -s ../../pyenv/include/python2.7 python2.7
    $ cd ../../
  6. Sửa các symlink python còn lại trong env. Bạn sẽ phải xóa các thư mục được liên kết tượng trưng và tạo lại chúng, như trên. Ngoài ra, đây là cú pháp để buộc tạo liên kết tượng trưng tại chỗ.

    $ 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. Kiểm tra

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

Aloha.


1
Bước 4 cần mô-đun pip có vẻ như. Đã thử với Python 2.7.9 mới nhất.
Roman Susi

1
Đã thử đi máng này, câu trả lời rất không đầy đủ với rất nhiều lỗi.
Alex R

4

Tôi đang sử dụng virtualenvwrapper và không muốn sửa đổi $ PATH, đây là cách:

$ which python3
/usr/local/bin/python3

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

3

Cách tiếp cận thông thường là tải xuống nguồn và xây dựng và cài đặt cục bộ (nhưng không trực tiếp trong virtualenv), sau đó tạo một virtualenv mới bằng cách sử dụng cài đặt Python cục bộ đó. Trên một số hệ thống, có thể tải xuống và cài đặt một con trăn dựng sẵn, thay vì xây dựng từ nguồn.


3

Bây giờ, một ngày, cách dễ nhất mà tôi thấy có phiên bản Python cập nhật hơn là cài đặt nó qua conda vào môi trường conda.


Cài đặt conda (bạn có thể cần một virtualenv cho việc này)

pip install conda

Cài đặt phiên bản Python mới bên trong môi trường conda

Tôi đang thêm câu trả lời này vào đây vì không cần tải xuống thủ công. condasẽ làm điều đó cho bạn.

Bây giờ hãy tạo một môi trường cho phiên bản Python mà bạn muốn. Trong ví dụ này tôi sẽ sử dụng 3.5.2, bởi vì nó là phiên bản mới nhất tại thời điểm viết bài này (tháng 8 năm 2016).

conda create -n py35 python=3.5.2

Sẽ tạo môi trường cho conda để cài đặt gói


Để kích hoạt môi trường này (tôi giả sử linux kiểm tra tài liệu conda ):

source activate py35

Bây giờ cài đặt những gì bạn cần thông qua pip hoặc conda trong môi trường (conda có hỗ trợ gói nhị phân tốt hơn).

conda install <package_name>

2

Bạn có thể sử dụng pyenv.

Có rất nhiều phiên bản khác nhau anaconda, jython, pypy và vv ...

https://github.com/yyuu/pyenv

Cài đặt đơn giản như 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

Mặc dù câu hỏi mô tả cụ thể việc cài đặt 2.6, tôi muốn thêm một số điểm nhập khẩu vào các câu trả lời xuất sắc ở trên trong trường hợp ai đó gặp phải vấn đề này. Đối với hồ sơ, trường hợp của tôi là tôi đã cố gắng cài đặt 2.7 trên hộp ubfox 10.04.

Đầu tiên, động lực của tôi đối với các phương thức được mô tả trong tất cả các câu trả lời ở đây là việc cài đặt Python từ ppa của dowsnake đã hoàn toàn thất bại. Vì vậy, xây dựng một Python địa phương là cách để đi.

Đã thử như vậy, tôi nghĩ việc dựa vào cài đặt mặc định của pip (với sudo apt-get install pip) là đủ. Điều này không may là sai. Hóa ra tôi đã nhận được tất cả các vấn đề khó chịu và cuối cùng không thể tạo ra một virtualenv.

Vì vậy, tôi khuyên bạn nên cài đặt pip cục bộ với wget https://raw.github.com/pypa/pip/master/contrib/get-pip.py && python get-pip.py --user. Câu hỏi liên quan này đã cho tôi gợi ý này.

Bây giờ nếu điều này không hoạt động, hãy đảm bảo rằng libssl-devcho Ubuntu hoặc openssl-devcho CentOS đã được cài đặt. Cài đặt chúng bằng apt-gethoặc yumsau đó xây dựng lại Python (không cần xóa bất cứ thứ gì nếu đã cài đặt, làm như vậy ở trên cùng). get-pipphàn nàn về điều đó, bạn có thể kiểm tra bằng cách chạy import ssltrên vỏ py.

Cuối cùng, đừng quên khai báo .local/binvà trăn cục bộ đến đường dẫn, kiểm tra which pipwhich python.


1

Hướng dẫn đầy đủ với pyenv

Nếu pyenv chưa được cài đặt thì hãy cài đặt nó với trình cài đặt pyenv :

$ curl https://pyenv.run | bash

Để sử dụng bất kỳ phiên bản python tùy chỉnh, ví dụ: 3.5.6sử dụng như sau:

pyenv install 3.5.6
pyenv virtualenv 3.5.6 name_of_your_env
pyenv activate name_of_your_env

0

Không, nhưng bạn có thể cài đặt một bản dựng Python bị cô lập (như ActivePython ) trong $HOMEthư mục của bạn .

Cách tiếp cận này là nhanh nhất và không yêu cầu bạn phải tự biên dịch Python.

(như một phần thưởng, bạn cũng có thể sử dụng trình quản lý gói nhị phân của ActiveState )


Trên thực tế, false vì virtualenv có thể cài đặt một phiên bản Python khác.
Raito

0

Tôi chưa tìm thấy câu trả lời phù hợp, vì vậy, đây là cách tôi thực hiện, dựa trên câu trả lời @toszter, nhưng không sử dụng hệ thống Python (và bạn có thể biết, không phải lúc nào cũng nên cài đặt setuptools và virtualenv ở cấp hệ thống khi giao dịch với nhiều người Cấu hình 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"

Thủ thuật phá vỡ vấn đề trứng gà ở đây là tạo virtualenv mà không cần setuptools trước, bởi vì nó không thành công (không thể tìm thấy pip). Có thể có thể cài đặt pip / bánh xe trực tiếp, nhưng bằng cách nào đó easy_install là điều đầu tiên tôi nghĩ đến. Ngoài ra, kịch bản có thể được cải thiện bằng cách bao thanh toán các phiên bản cụ thể.

Lưu ý Sử dụng xz trong kịch bản.


0

Trước hết, Cảm ơn bạn DTing cho câu trả lời tuyệt vời. Nó khá là hoàn hảo.

Đối với những người đang đau khổ vì không có quyền truy cập GCC trong lưu trữ được chia sẻ, hãy truy cập ActivePython thay vì python bình thường như Scott Stafford đã đề cập. Dưới đây là các lệnh cho điều đó.

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

Nó sẽ hỏi bạn đường dẫn đến thư mục python. Đi vào

../../.localpython

Chỉ cần thay thế ở trên như Bước 1 trong câu trả lời của DTing và tiếp tục với Bước 2 sau đó. Xin lưu ý rằng URL gói ActivePython có thể thay đổi với bản phát hành mới. Bạn luôn có thể nhận URL mới từ đây: http://www.activestate.com/activepython/doads

Dựa trên URL, bạn cần thay đổi tên của lệnh tar và cd dựa trên tệp nhận được.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.