จะสร้าง virtualenv ด้วย Python3.3 ใน Ubuntu ได้อย่างไร


46

ฉันใช้ Pangolin แม่นยำ amd64 ฉันติดตั้ง Python 3.3 จาก ppa: fkrull / deadsnakes

ตอนนี้ฉันต้องการใช้ Python เวอร์ชันใหม่จริงๆ ใน virtualenv แต่ฉันจะทำสิ่งนี้ได้อย่างไร ฉันได้รับข้อผิดพลาดต่อไปนี้:

$ virtualenv --no-site-packages --distribute -p /usr/bin/python3.3 ~/.virtualenvs/pywork3
Running virtualenv with interpreter /usr/bin/python3.3
The --no-site-packages flag is deprecated; it is now the default behavior.
New python executable in /home2/USERNAME/.virtualenvs/pywork3/bin/python3.3
Also creating executable in /home2/USERNAME/.virtualenvs/pywork3/bin/python
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/site-packages/site.py", line 73, in <module>
    __boot()
  File "/usr/local/lib/python2.7/site-packages/site.py", line 2, in __boot
    import sys, imp, os, os.path   
ImportError: No module named 'imp'
ERROR: The executable /home2/USERNAME/.virtualenvs/pywork3/bin/python3.3 is not functioning
ERROR: It thinks sys.prefix is '/home2/USERNAME/.virtualenvs' (should be '/home2/USERNAME/.virtualenvs/pywork3')
ERROR: virtualenv is not compatible with this system or executable

หากฉันใช้python3.3เพื่อโทร virtualenv แทนฉันได้รับข้อผิดพลาดนี้:

$ python3.3 /usr/bin/virtualenv --no-site-packages --distribute -p /usr/bin/python3.3 ~/.virtualenvs/pywork3
Traceback (most recent call last):
  File "/usr/bin/virtualenv", line 2, in <module>
    import virtualenv
ImportError: No module named 'virtualenv'

ผมติดอยู่. ความช่วยเหลือใด ๆ ที่ชื่นชมอย่างมาก!

แก้ไข: ทำตามคำแนะนำโดย @thefourtheye ฉันได้ลบsite-packagesไดเรกทอรีภายในเครื่องของฉัน(ลบอย่างมีประสิทธิภาพเท่านั้นsite.py) ตอนนี้ฉันกำลังก้าวไปอีกขั้น แต่virtualenvบ่นเกี่ยวกับสิ่งที่ขาดหายไปeasy_install:

 Error [Errno 2] No such file or directory:   
'/home2/USERNAME/.virtualenvs/pywork3/bin/easy_install' while executing command    
/home2/USERNAME/.virt...rk3/bin/easy_install /usr/share/python-virtualenv/pip-1.1.tar.gz

ฉันติดตั้งแพคเกจpython3-setuptoolsซึ่งติดตั้ง easy_install รุ่น Py3

EDIT2:

นี่คือเอาต์พุต verbose โดยไม่ต้องผ่านอย่างชัดเจน--distributeและ--no-site-packagesเนื่องจากสวิตช์ทั้งสองนี้เป็นพฤติกรรมเริ่มต้นของvirtualenvของฉัน:

$ virtualenv --verbose -p /usr/bin/python3.3 ~/.virtualenvs/pywork3
Running virtualenv with interpreter /usr/bin/python3.3
Creating /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3
Symlinking Python bootstrap modules
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/config-3.3m
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/lib-dynload
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/os.py
  Ignoring built-in bootstrap module: posix
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/posixpath.py
  Cannot import bootstrap module: nt
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/ntpath.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/genericpath.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/fnmatch.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/locale.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/encodings
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/codecs.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/stat.py
  Cannot import bootstrap module: UserDict
  Cannot import bootstrap module: copy_reg
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/types.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/re.py
  Cannot import bootstrap module: sre
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/sre_parse.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/sre_constants.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/sre_compile.py
  Ignoring built-in bootstrap module: zlib
  Cannot import bootstrap module: _abcoll
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/warnings.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/linecache.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/abc.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/io.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/_weakrefset.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/copyreg.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/tempfile.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/random.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/__future__.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/collections
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/keyword.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/tarfile.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/shutil.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/struct.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/copy.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/base64.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/bisect.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/_dummy_thread.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/hashlib.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/heapq.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/hmac.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/reprlib.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/rlcompleter.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/weakref.py
Creating /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/site-packages
Writing /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/site.py
Writing /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/orig-prefix.txt
Writing /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/no-global-site-packages.txt
Creating parent directories for /home2/USERNAME/.virtualenvs/pywork3/include
Symlinking /home2/USERNAME/.virtualenvs/pywork3/include/python3.3m
Creating /home2/USERNAME/.virtualenvs/pywork3/bin
New python executable in /home2/USERNAME/.virtualenvs/pywork3/bin/python3.3
Changed mode of /home2/USERNAME/.virtualenvs/pywork3/bin/python3.3 to 0o755
Also creating executable in /home2/USERNAME/.virtualenvs/pywork3/bin/python
Changed mode of /home2/USERNAME/.virtualenvs/pywork3/bin/python to 0o755
Testing executable with /home2/USERNAME/.virtualenvs/pywork3/bin/python3.3 -c "
import sys
prefix = sys.prefix
if sys.version_info[0] == 3:
    prefix = prefix.encode('utf8')
if hasattr(sys.stdout, 'detach'):
    sys.stdout = sys.stdout.detach()
elif hasattr(sys.stdout, 'buffer'):
    sys.stdout = sys.stdout.buffer
sys.stdout.write(prefix)
"
Got sys.prefix result: '/home2/USERNAME/.virtualenvs/pywork3'
Creating /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/distutils
Writing /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/distutils/__init__.py
Writing /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/distutils/distutils.cfg
Using existing distribute egg: /usr/share/python-virtualenv/distribute-0.6.24.tar.gz
Installing distribute..............................................................................................................................................................................................................................................................................................................................................................................................................done.
Installing existing pip-1.1.tar.gz distribution: /usr/share/python-virtualenv/pip-1.1.tar.gz
Installing pip...
  Error [Errno 2] No such file or directory: '/home2/USERNAME/.virtualenvs/pywork3/bin/easy_install' while executing command /home2/USERNAME/.virt...rk3/bin/easy_install /usr/share/python-virtualenv/pip-1.1.tar.gz
...Installing pip...done.
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/virtualenv.py", line 2283, in <module>
    main()
  File "/usr/lib/python2.7/dist-packages/virtualenv.py", line 938, in main
    never_download=options.never_download)
  File "/usr/lib/python2.7/dist-packages/virtualenv.py", line 1054, in create_environment
    install_pip(py_executable, search_dirs=search_dirs, never_download=never_download)
  File "/usr/lib/python2.7/dist-packages/virtualenv.py", line 643, in install_pip
    filter_stdout=_filter_setup)
  File "/usr/lib/python2.7/dist-packages/virtualenv.py", line 976, in call_subprocess
    cwd=cwd, env=env)
  File "/usr/lib/python3.3/subprocess.py", line 818, in __init__
    restore_signals, start_new_session)
  File "/usr/lib/python3.3/subprocess.py", line 1416, in _execute_child
    raise child_exception_type(errno_num, err_msg)
FileNotFoundError: [Errno 2] No such file or directory: '/home2/USERNAME/.virtualenvs/pywork3/bin/easy_install'

เพียงเพราะความชัดเจนของคุณสามารถลองคำสั่งนี้ (ไม่รวมdistribute): virtualenv --no-site-packages -p /usr/bin/python3.3 ~/.virtualenvs/pywork3?
don.joey

ฉันพยายามด้วย--setuptoolsเช่นกันและผลลัพธ์ก็เหมือนกันทุกประการ (รวมถึงการติดตั้งการแจกจ่าย)
andreas-h

ใน 14.04 ทุกอย่างทำงานอย่างไม่ลำบาก
Antti Haapala

คำตอบ:


25
  1. สำรองข้อมูลแพ็คเกจเว็บไซต์

    cp -r /usr/local/lib/python2.7/site-packages/ /tmp/site-packages

  2. ตัดทอนไดเรกทอรีนั้น

    rm -rf /usr/local/lib/python2.7/site-packages/

  3. ตอนนี้ลองเหมือนกัน

    virtualenv --no-site-packages --distribute -p /usr/bin/python3.3 ~/.virtualenvs/pywork3

  4. ในการติดตั้งโดยไม่ต้อง pip

    virtualenv --no-site-packages --distribute -p /usr/bin/python3.3 ~/.virtualenvs/pywork3 --no-pip

แก้ไข:ดูเหมือนว่ารุ่น virtualenv (1.7.1.2) และ python3.3 เข้ากันไม่ได้ ดังนั้นโปรดลองสิ่งนี้

  1. ถอนการติดตั้ง python-virtualenv โดยใช้ sudo apt-get remove python-virtualenv

  2. wget http://peak.telecommunity.com/dist/ez_setup.py; sudo python ez_setup.py สิ่งนี้จะติดตั้ง easy_install ล่าสุด

  3. sudo easy_install pip

  4. sudo pip install virtualenv

  5. virtualenv --no-site-packages --distribute -p /usr/bin/python3.3 ~/.virtualenvs/pywork3


น่าสนใจตอนนี้ฉันกำลังก้าวไปอีกขั้น แต่ก็ยังไม่ถึงขั้นนั้น ดูคำถามที่อัปเดตของฉัน
andreas-h

ฉันกำลังอ่านรหัส virtualenv มันจะมีประโยชน์ถ้าคุณสามารถรันคำสั่งเดียวกันด้วยการใช้คำฟุ่มเฟื่อยมากขึ้นและแสดงให้เราเห็นผลลัพธ์ที่สมบูรณ์ virtualenv --no-site-packages --distribute -p /usr/bin/python3.3 ~/.virtualenvs/pywork3 --verbose
thefourtheye

เข้าใจแล้วดูคำถามที่อัปเดตของฉัน
andreas-h

ได้รับการวิเคราะห์มานานกว่าสองชั่วโมง ดูเหมือนว่าแจกจ่ายไม่ได้ติดตั้งสคริปต์ easy_install ในไดเร็กทอรี bin เราสามารถติดตั้งได้ในภายหลัง ดังนั้นเพียงแค่ติดตั้ง virtualenv ให้ลองติดตั้งโดยไม่ต้องใช้ pip เนื่องจากฉันได้อัปเดตคำตอบแล้ว
thefourtheye

1
แทนการติดตั้งด้วยตนเอง virtualenv ผมเพิ่งดาวน์โหลด packge .dev สำหรับอูบุนตู raring จากpackages.ubuntu.com/raring/all/python-virtualenv/downloaddpkg -iและติดตั้งได้ผ่านทาง ดูเหมือนว่าจะทำงานตอนนี้ ขอบคุณมาก!
andreas-h

58

Python 3.3 มี venv ในตัว

http://docs.python.org/3/library/venv.html#module-venv

เพียงแค่เรียกใช้

pyvenv-3.3 /path/to/environment

และจากนั้นเพื่อเปิดใช้งานมัน

source /path/to/environment/bin/activate

virtualenv ในตัวรุ่นนี้มีความยืดหยุ่นมากกว่าสิ่งที่คุณคุ้นเคย ตัวอย่างเช่นคุณสามารถขยาย EnvBuilder ให้ทำสิ่งที่คุณต้องการ คุณสามารถคัดลอกตัวอย่างการนำไปใช้ของ EnvBuilder จากลิงก์ด้านล่างและเล่นกับมัน: http://docs.python.org/3/library/venv.html#an-example-of-extending-envbuilder

สคริปต์ดังกล่าวมีแนวโน้มที่จะทำสิ่งที่เราคาดว่าจะได้รับจาก virtualenv ดังนั้นหากคุณต้องการ virtualenv ที่มี easy_install และ pip ​​คุณควรไปได้เลย

ดูการแก้ไขของ@MarkOfSineด้านล่างเพื่อรับความกระจ่างเกี่ยวกับวิธีการทำงานหากคุณยังสับสน


หากต้องการเพิ่มไปด้านบนและตามเอกสาร:
ตัวอย่างเช่นหลังจากดำเนินการ: pyvenv-3.3 /path/to/my_project/venv
คุณสามารถเรียกใช้distribute_setup.pyซึ่งดูเหมือนจะทำสิ่งต่าง ๆ แต่โดยพื้นฐานแล้วคุณจะอยู่easy_installใน./my_project/venv/binไดเรกทอรีของคุณ
สิ่งนี้สามารถใช้ในการติดตั้งpipและไม่ชอบ

มันไม่ได้บอกว่าคุณควรได้รับdistribute_setup.pyจากที่ใดดังนั้นฉันจึงดาวน์โหลดจาก:

http://python-distribute.org/distribute_setup.py

และการใช้สภาพแวดล้อมที่เปิดใช้งาน:

cd /path/to/my_project
source venv/bin/activate

วิ่ง:

python distribute_setup.py

และ

easy_install pip

ซึ่งเสร็จสิ้นการตั้งค่าสภาพแวดล้อมเสมือนให้สอดคล้องกับ virtualenv บน python 2.x มากขึ้น


2
เป็นคนดี - ฉันไม่ได้ตระหนักถึงสิ่งนี้ ...
andreas-h

1
อันที่จริงดูเหมือนว่าจะไม่เป็น virtualenv "ของจริง" ไม่มี pip หรือ easy_install ให้ใช้งานหลังจากเปิดใช้งาน
andreas-h

@ andreas-h คุณต้องติดตั้งด้วยตัวเอง นั่นไม่ได้ทำให้ไม่ใช่ "ของจริง"
Chris

1
@ andreas-h นอกจากนี้ยังได้รับการออกแบบมาเพื่อให้คุณสามารถสร้างสคริปต์เพื่อเพิ่มสิ่งที่คุณต้องการ .. ดูdocs.python.org/3/library/…
Chris

เมื่อเทอร์มินัลคุณตะโกนเกี่ยวกับการอนุญาตที่ไม่ถูกต้องเมื่อทำการติดตั้ง pip ให้ตรวจสอบว่าคุณใช้ไบนารีที่ถูกต้องของ easy_install คุณสามารถเลือกไบนารีใน virtualenv ./venv/bin/easy_install pipที่ชัดเจนโดย
OrangeTux

49

มันง่ายกว่าที่คิด:

virtualenv -p /usr/bin/python3 yourenv
source yourenv/bin/activate
pip install package-name

ได้ผลจริงๆ :)


5
นั่นควรเป็นคำตอบที่ถูกต้อง
micgeronimo

ใช่! นั่นง่ายมาก! ขอบคุณชาย @Cem Yildiz
Fahad Ahammed

8

คุณกำลังทำสิ่งนี้ซับซ้อนเกินไป หากมันรวมอยู่ในpython3เพียงสร้างด้วย:

python3 -m venv

คุณสามารถสร้างนามแฝงได้หากต้องการ

alias virtualenv3='python3 -m venv'

คุณอาจต้องระบุล่ามขึ้นอยู่กับเครื่อง:

alias virtualenv3='python3 -m venv -p python3'

python3-venvจำเป็นต้องมีแพ็คเกจนี้อย่างน้อยใน Ubuntu 14.04
gioele

สำหรับผม (ยัง 14.04) python3.4-venvแพคเกจถูกเรียกว่า
tobek

2

ขั้นตอนที่เหมาะกับฉัน: บน MAC OSX 10.9.5

  1. ดาวน์โหลดและติดตั้งงูใหญ่ 3.4.3 ด้วยตนเอง

    P3PATH=/Users/$USER/Python3
    mkdir -p $P3PATH
    cd $P3PATH
    tar -zxvf Python-3.4.3.tgz
    ./configure --prefix=$P3PATH/Python-3.4.3
    make; make install
  2. สร้าง virtualenv

    $P3PATH/Python-3.4.3/bin/pyvenv py3env
    source py3env/bin/activate

หมายเหตุ: ใช้
virtualenv -p <path to python3> py3envงานไม่ได้:

Error due to zlib

นอกจากนี้ยังใช้งานได้ดีกับ Debian 7 (เสียงดัง) อีก P3PATH
rubo77

สำหรับผู้ใช้ดิสทริบิวเตอร์ในตู้คอนเทนเนอร์ตรวจสอบให้แน่ใจว่าได้ติดตั้งlibssl-devและzlib1g-devเพื่อให้ไพ ธ อนคอมไพล์ด้วย _ssl.so zlib.so
Nehal J Wani

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