เป็นไปได้หรือไม่ที่จะติดตั้ง Python รุ่นอื่นลงใน Virtualenv


146

ฉันมีบัญชีที่ใช้ร่วมกันในการโฮสต์เว็บที่ติดตั้ง Python 2.4 ไว้แล้ว แต่รหัสของฉันไม่สามารถทำงานร่วมกับ 2.4 ได้ เป็นไปได้ไหมที่จะติดตั้ง Python 2.6 ไปยัง Virtualenv โดยตรง?

หมายเหตุ: ฉันไม่ได้รับอนุญาตให้ติดตั้งในเซิร์ฟเวอร์ที่ใช้ร่วมกัน

คำตอบ:


253

นี่คือตัวเลือกสำหรับ 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) สิ่งที่คุณต้องการทำคือติดตั้งหลามในไดเรกทอรีที่คุณสามารถเขียนได้เช่นกัน

hereคุณสามารถทำตามคำแนะนำ

สำหรับ 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) ติดตั้ง 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) สร้าง virtualenv โดยใช้ไพ ธ อนของคุณ
virtualenv docs

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

4) เปิดใช้งานสภาพแวดล้อม

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

5) ตรวจสอบ

(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
เขียนเก่ง! สองความคิดเห็นแม้ว่า: 1. ฉันไม่ต้องทำmake cleanก่อนที่จะทำ ./configure --prefix=/home/<user>/.localpythonจริงmake cleanข้อผิดพลาดคืน 2. virtualenv name -p=/python/pathไม่ทำงานแทนvirtualenv name -p /python/pathทำงานได้ดี ฉันคิดว่ามันเป็นรุ่น virtualenv ไชโย!
zzart

1
ฉันแหกคุกออกมาจาก gcc แต่สามารถใช้ ActiveState Python แทนในขั้นตอนที่ 1: docs.activestate.com/activepython/2.7/ …
Scott Stafford

3
นี่คือรายการของโมดูลที่คุณต้องติดตั้ง (บนเดเบียน) เพื่อให้การทำงานใกล้เคียงกับการติดตั้งแบบเต็มที่สุดเท่าที่จะทำได้:curl gcc build-essential libncursesw5-dev libreadline5-dev libssl-dev libgdm-dev libbz2-dev libc6-dev libsqlite3-dev tk-dev
Claudiu

1
Nitpick: sourceเป็นการทุบตี เทียบเท่า POSIX .คือ
l0b0

4
ฉันพบว่าการทำโมดูลพื้นฐานจำนวนมากนี้ขาดหายไป
user299709

20

Pre-requisites:

  1. sudo easy_install virtualenv
  2. sudo pip install virtualenvwrapper

การติดตั้ง virtualenv ด้วย Python2.6:

  1. คุณสามารถดาวน์โหลดสร้างและติดตั้ง Python เวอร์ชัน/usr/localอื่นหรือที่อื่น

  2. หากเป็นตำแหน่งอื่นที่ไม่ใช่/usr/localให้เพิ่มไปยัง PATH ของคุณ

  3. โหลดเชลล์ของคุณใหม่เพื่อรับ PATH ที่อัพเดท

  4. จากจุดนี้เป็นต้นไปคุณควรจะเรียกไบนารีไพ ธ อน 2 ตัวต่อไปนี้จากเชลล์python2.5และpython2.6

  5. สร้างอินสแตนซ์ใหม่ของ virtualenv ด้วยpython2.6:

    mkvirtualenv --python=python2.6 yournewenv


4
ฉันคิดว่าคำสั่ง mkvirtualenv ใช้ได้เฉพาะเมื่อคุณติดตั้ง virtualenvwrapper
DTing

4

ขั้นตอนนี้จะติดตั้ง Python2.7 ทุกที่และช่วยลดการอ้างอิงเส้นทางที่แน่นอนใด ๆภายในของคุณenvโฟลเดอร์(การจัดการโดย virtualenv) แม้กระทั่ง virtualenv ก็ไม่ได้ติดตั้งอย่างแน่นอน

ตามหลักการแล้วคุณสามารถวางไดเรกทอรีระดับบนสุดลงใน tarball แจกจ่ายและเรียกใช้สิ่งที่กำหนดค่าไว้ภายใน tarball บนเครื่องที่ไม่มี Python (หรือการอ้างอิงใด ๆ )ติดตั้งอยู่

ติดต่อฉันด้วยคำถามใด ๆ นี่เป็นเพียงส่วนหนึ่งของโครงการขนาดใหญ่ที่กำลังดำเนินอยู่ ตอนนี้สำหรับการตก ...

  1. ตั้งค่าโฟลเดอร์สภาพแวดล้อม

    $ mkdir env
    $ mkdir pyenv
    $ mkdir dep
    
  2. รับ Python-2.7.3 และ virtualenv โดยไม่ต้องติดตั้งรูทระบบปฏิบัติการใด ๆ

    $ 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. แตกและติดตั้ง Python-2.7.3 ลงในpyenvdir make cleanเป็นทางเลือกถ้าคุณกำลังทำเช่นนี้เป็นครั้งที่ 2, 3, Nth ...

    $ 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. สร้าง virtualenv ของคุณ

    $ dep/virtualenv.py --python=/path/to/pyenv/bin/python --verbose env
  5. แก้ไข symlink เป็น python2.7 ภายใน env/include/

    $ ls -l env/include/
    $ cd !$
    $ rm python2.7
    $ ln -s ../../pyenv/include/python2.7 python2.7
    $ cd ../../
    
  6. แก้ไข python symlink ที่เหลือใน env คุณจะต้องลบไดเรกทอรีที่เชื่อมโยงสัญลักษณ์และสร้างใหม่ดังกล่าวข้างต้น นอกจากนี้นี่คือไวยากรณ์เพื่อบังคับให้สร้างการเชื่อมโยงสัญลักษณ์ในสถานที่

    $ 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. ทดสอบ

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

Aloha


1
ขั้นตอนที่ 4 ต้องการโมดูล pip ดูเหมือนว่า พยายามกับ Python 2.7.9 ล่าสุด
Roman Susi

1
พยายามจะทำสิ่งนี้คำตอบที่ไม่สมบูรณ์พร้อมข้อผิดพลาดมากมาย
Alex R

4

ฉันใช้ virtualenvwrapper และไม่ต้องการแก้ไข $ PATH ต่อไปนี้เป็นวิธี:

$ which python3
/usr/local/bin/python3

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

3

วิธีการปกติคือการดาวน์โหลดแหล่งที่มาและสร้างและติดตั้งภายใน (แต่ไม่ได้โดยตรงใน virtualenv) แล้วสร้าง virtualenv ใหม่โดยใช้การติดตั้ง Python ในพื้นที่นั้น ในบางระบบอาจเป็นไปได้ที่จะดาวน์โหลดและติดตั้งงูหลามที่สร้างไว้ล่วงหน้าแทนที่จะสร้างจากแหล่งที่มา


3

วันนี้วิธีที่ง่ายที่สุดที่ฉันพบว่ามีเวอร์ชัน Python ที่อัปเดตมากกว่าคือติดตั้งผ่าน conda ในสภาพแวดล้อม conda


ติดตั้ง conda (คุณอาจต้องมี virtualenv สำหรับสิ่งนี้)

pip install conda

การติดตั้ง Python เวอร์ชั่นใหม่ภายในคอนโดสภาพแวดล้อม

ฉันกำลังเพิ่มคำตอบนี้ที่นี่เพราะไม่จำเป็นต้องดาวน์โหลดด้วยตนเอง condaจะทำเพื่อคุณ

ตอนนี้สร้างสภาพแวดล้อมสำหรับเวอร์ชัน Python ที่คุณต้องการ ในตัวอย่างนี้ฉันจะใช้3.5.2เพราะมันเป็นเวอร์ชั่นล่าสุด ณ เวลาที่เขียนนี้ (ส.ค. 2559)

conda create -n py35 python=3.5.2

จะสร้างสภาพแวดล้อมสำหรับ conda เพื่อติดตั้งแพ็คเกจ


เพื่อเปิดใช้งานสภาพแวดล้อมนี้ (ฉันสมมติว่า linux ตรวจสอบเอกสาร conda ):

source activate py35

ตอนนี้ติดตั้งสิ่งที่คุณต้องการผ่านทาง pip หรือ conda ใน environemnt (conda มีการสนับสนุนแพ็คเกจไบนารีที่ดีกว่า)

conda install <package_name>

2

คุณอาจใช้ pyenv

มีแอนาคอนดามากมายหลายรุ่น, จัมเปอร์, ไพพิวและอื่น ๆ ...

https://github.com/yyuu/pyenv

ติดตั้งง่ายเหมือน 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

แม้ว่าคำถามจะอธิบายการติดตั้ง 2.6 โดยเฉพาะ แต่ฉันต้องการเพิ่มผู้นำเข้าบางรายให้กับคำตอบที่ดีเลิศข้างต้นในกรณีที่มีคนเจอ สำหรับบันทึกกรณีของฉันคือฉันพยายามติดตั้ง 2.7 บนกล่อง ubuntu 10.04

ก่อนอื่นแรงจูงใจของฉันที่มีต่อวิธีที่อธิบายไว้ในคำตอบทั้งหมดที่นี่คือการติดตั้ง Python จากppa ของ deadsnakeนั้นเป็นความล้มเหลวทั้งหมด ดังนั้นการสร้าง Python ในพื้นที่เป็นวิธีที่จะไป

หลังจากลองแล้วฉันคิดว่าการใช้การติดตั้ง pip (พร้อมsudo apt-get install pip) เริ่มต้นนั้นน่าจะเพียงพอ สิ่งนี้โชคไม่ดี ปรากฎว่าฉันได้รับกางเกงขาสั้นทั้งหมดของปัญหาที่น่ารังเกียจและในที่สุดก็ไม่สามารถสร้าง virtualenv

ดังนั้นผมขอแนะนำให้ติดตั้ง pip ในประเทศwget https://raw.github.com/pypa/pip/master/contrib/get-pip.py && python get-pip.py --userด้วย คำถามที่เกี่ยวข้องนี้ให้คำแนะนำนี้แก่ฉัน

ทีนี้ถ้ามันไม่ได้ผลตรวจสอบให้แน่ใจว่าติดตั้งlibssl-devUbuntu หรือopenssl-devCentOS แล้ว ติดตั้งด้วยapt-getหรือyumจากนั้นสร้าง Python ใหม่ (ไม่จำเป็นต้องลบอะไรเลยหากติดตั้งไว้แล้วให้ทำบนสุด) get-pipบ่นเกี่ยวกับเรื่องนั้นคุณสามารถตรวจสอบได้โดยการเรียกใช้import sslบนเปลือกหอย

สุดท้ายอย่าลืมที่จะประกาศ.local/binและงูหลามท้องถิ่นไปยังเส้นทางตรวจสอบกับและwhich pipwhich python


1

คู่มือฉบับเต็มพร้อมpyenv

หากไม่ได้ติดตั้งpyenv ให้ติดตั้งด้วยpyenv-installer :

$ curl https://pyenv.run | bash

ในการใช้งานเวอร์ชันหลามที่กำหนดเองใด ๆ เช่น3.5.6ใช้ต่อไปนี้

pyenv install 3.5.6
pyenv virtualenv 3.5.6 name_of_your_env
pyenv activate name_of_your_env

0

ไม่ แต่คุณสามารถติดตั้ง Python บิลด์ (เช่นActivePython ) ภายใต้$HOMEไดเรกทอรีของคุณ

วิธีนี้เป็นวิธีที่เร็วที่สุดและไม่ต้องการให้คุณรวบรวมไพ ธ อนด้วยตัวคุณเอง

(เป็นโบนัสคุณจะได้ใช้ตัวจัดการแพคเกจไบนารีของ ActiveState ด้วย)


จริง ๆ แล้วเท็จเป็น virtualenv สามารถติดตั้ง Python เวอร์ชันอื่นได้
Raito

0

ฉันไม่พบคำตอบที่เหมาะสมดังนั้นต่อไปนี้ไปซึ่งสร้างตามคำตอบ @toszter แต่ไม่ได้ใช้ระบบ Python (และคุณอาจรู้ว่ามันไม่ควรติดตั้ง setuptools และ virtualenv ในระดับระบบเมื่อจัดการกับหลาย ๆ การกำหนดค่าหลาม):

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

เคล็ดลับในการทำลายปัญหาไข่ไก่ที่นี่คือการทำให้ virtualenv โดยไม่ต้อง setuptools ก่อนเพราะมันเป็นอย่างอื่นล้มเหลว (ไม่พบจุดเล็ก ๆ ) อาจเป็นไปได้ที่จะติดตั้ง pip / wheel โดยตรง แต่อย่างใด easy_install เป็นสิ่งแรกที่อยู่ในใจของฉัน นอกจากนี้สคริปต์ยังสามารถปรับปรุงได้ด้วยการแยกรุ่นที่ชัดเจน

NB ใช้ xz ในสคริปต์


0

ก่อนอื่นขอขอบคุณ DTing สำหรับคำตอบที่ยอดเยี่ยม มันค่อนข้างสมบูรณ์แบบมาก

สำหรับผู้ที่ทุกข์ทรมานจากการไม่มีการเข้าถึง GCC ในโฮสติ้งที่ใช้ร่วมกันให้ไปที่ ActivePython แทนที่จะเป็นไพ ธ อนปกติเช่น Scott Stafford ที่กล่าวถึง นี่คือคำสั่งสำหรับสิ่งนั้น

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

มันจะถามคุณเส้นทางไปยังไดเรกทอรีหลาม เข้าสู่

../../.localpython

เพียงแทนที่ข้างบนเป็นขั้นตอนที่ 1 ในคำตอบของ DTing และไปข้างหน้าด้วยขั้นตอนที่ 2 หลังจากนั้น โปรดทราบว่า URL แพคเกจ ActivePython อาจเปลี่ยนแปลงได้ด้วยรีลีสใหม่ คุณสามารถรับ URL ใหม่ได้จากที่นี่: http://www.activestate.com/activepython/downloads

จาก URL คุณต้องเปลี่ยนชื่อคำสั่ง tar และ cd ตามไฟล์ที่ได้รับ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.