Làm cách nào để tạo virtualenv với Python3.3 trong Ubuntu?


46

Tôi đang chạy Precise Pangolin amd64. Tôi đã cài đặt Python 3.3 từ ppa: fkrull / dowsnakes.

Bây giờ tôi muốn thực sự sử dụng phiên bản Python mới này trong virtualenv. Nhưng làm thế nào tôi có thể làm điều này? Tôi nhận được lỗi sau đây:

$ 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

Nếu thay vào đó, tôi rõ ràng sử dụng python3.3để gọi virtualenv, tôi gặp lỗi này:

$ 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'

Tôi đang bị mắc kẹt. Bất kỳ trợ giúp nào cũng được đánh giá rất cao!

EDIT: Theo lời khuyên của @thefourtheye, tôi đã xóa site-packagesthư mục địa phương của mình (chỉ thực sự xóa site.py). Bây giờ tôi đang tiến thêm một bước, nhưng virtualenv phàn nàn về việc mất tích 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

Tôi đã cài đặt gói python3-setuptools, cài đặt phiên bản Py3 của easy_install.

EDIT2:

Đây là đầu ra dài dòng, không truyền rõ ràng --distribute--no-site-packages, vì hai công tắc này là hành vi mặc định của virtualenv của tôi :

$ 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'

Để rõ ràng, bạn có thể thử lệnh này (không bao gồm distribute) : virtualenv --no-site-packages -p /usr/bin/python3.3 ~/.virtualenvs/pywork3?
don.joey

Tôi cũng đã thử --setuptoolsvà kết quả hoàn toàn giống nhau (bao gồm cả cài đặt phân phối).
andreas-h

Trong 14.04 mọi thứ hoạt động không đau đớn.
Antti Haapala

Câu trả lời:


25
  1. Hãy sao lưu các gói trang web.

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

  2. Cắt bớt thư mục đó

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

  3. Bây giờ hãy thử như vậy

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

  4. Để cài đặt mà không cần pip

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

EDIT: Có vẻ như phiên bản virtualenv (1.7.1.2) và python3.3 không tương thích. Vì vậy, hãy thử điều này

  1. Gỡ cài đặt python-virtualenv bằng cách sử dụng sudo apt-get remove python-virtualenv

  2. wget http://peak.telecommunity.com/dist/ez_setup.py; sudo python ez_setup.py Điều này sẽ cài đặt easy_install mới nhất.

  3. sudo easy_install pip

  4. sudo pip install virtualenv

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


Thật thú vị, bây giờ tôi đang tiến thêm một bước, nhưng vẫn chưa đi hết. Xem câu hỏi cập nhật của tôi
andreas-h

Tôi đang đi qua mã virtualenv. Sẽ rất hữu ích, nếu bạn có thể thực hiện cùng một lệnh với mức độ chi tiết tăng và cho chúng tôi thấy đầu ra hoàn chỉnh. virtualenv --no-site-packages --distribute -p /usr/bin/python3.3 ~/.virtualenvs/pywork3 --verbose
thefourtheye

hiểu rồi, xem câu hỏi cập nhật của tôi
andreas-h

Đã được phân tích trong hơn hai giờ. Có vẻ như phân phối không cài đặt các tập lệnh easy_install trong thư mục bin. Chúng ta có thể cài đặt chúng bằng tay sau. Vì vậy, chỉ để cài đặt virtualenv, hãy thử cài đặt mà không cần pip, như tôi đã cập nhật trong câu trả lời
thefourtheye

1
Thay vì cài đặt virtualenv bằng tay, tôi chỉ cần tải về GÓI .dev cho Ubuntu háo hức từ packages.ubuntu.com/raring/all/python-virtualenv/download và cài đặt nó qua dpkg -i. Có vẻ như để làm việc bây giờ. Cảm ơn rất nhiều!
andreas-h

58

Python 3.3 có tích hợp venv.

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

Đơn giản chỉ cần chạy

pyvenv-3.3 /path/to/environment

Và sau đó để kích hoạt nó

source /path/to/environment/bin/activate

Phiên bản tích hợp của virtualenv này linh hoạt hơn nhiều so với những gì bạn có thể đã từng sử dụng. Ví dụ: bạn có thể mở rộng EnvBuilder để làm bất cứ điều gì bạn muốn. Bạn có thể sao chép một triển khai ví dụ về EnvBuilder từ liên kết bên dưới và chơi xung quanh nó: http://docs.python.org/3/l Library / vvenv.html # an-example-of-extending-envbuilder

Kịch bản trên có khả năng thực hiện hầu hết những gì chúng ta mong đợi để thoát khỏi virtualenv. Vì vậy, nếu bạn chỉ cần một virtualenv với easy_install và pip, bạn nên sử dụng.

Xem các chỉnh sửa của @MarkOfSine bên dưới để biết rõ cách chạy nếu bạn vẫn còn bối rối.


Để thêm vào ở trên và theo tài liệu:
Ví dụ: sau khi thực hiện: pyvenv-3.3 /path/to/my_project/venv
Bạn có thể chạy distribute_setup.py, có vẻ như làm nhiều việc khác nhau, nhưng về cơ bản, bạn kết thúc với easy_installtrong ./my_project/venv/binthư mục của mình .
Điều này sau đó có thể được sử dụng để cài đặt pipvà tương tự.

Nó không cho biết bạn nên lấy distribute_setup.pytừ đâu, vì vậy tôi đã tải xuống từ:

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

và sử dụng môi trường kích hoạt:

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

chạy:

python distribute_setup.py

easy_install pip

Sau đó hoàn thành việc thiết lập môi trường ảo trực tuyến hơn với virtualenv trên python 2.x


2
một điều tuyệt vời - tôi đã không nhận ra điều này ...
andreas-h

1
Trên thực tế, đây dường như không phải là một virtualenv "thực sự". Không có pip hay easy_install có sẵn sau khi kích hoạt nó.
andreas-h

@ andreas-h Bạn cần tự cài đặt chúng. Điều đó không làm cho nó không "thực".
Chris

1
@ andreas-h Ngoài ra, nó được thiết kế để bạn có thể tạo ra một kịch bản để thêm bất cứ điều gì bạn muốn mình .. thấy docs.python.org/3/library/...
Chris

Khi thiết bị đầu cuối của bạn tiếp tục la hét về các quyền sai khi cài đặt pip, hãy kiểm tra xem bạn có đang sử dụng nhị phân chính xác của easy_install không. Bạn có thể chọn nhị phân trong virtualenv một cách rõ ràng bằng cách ./venv/bin/easy_install pip.
OrangeTux 17/12/13

49

Nó dễ hơn là có vẻ như:

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

Công việc thực sự :)


5
Đó phải là câu trả lời đúng
micgeronimo

Vâng! Điều đó thật dễ dàng! Cảm ơn người đàn ông. @Cem Yildiz
Fahad Ahammed

9

Bạn đang làm điều này quá phức tạp. Nếu nó được bao gồm trong python3, chỉ cần tạo nó với:

python3 -m venv

Bạn thậm chí có thể tạo bí danh nếu bạn muốn

alias virtualenv3='python3 -m venv'

Tùy thuộc vào máy, bạn có thể cần chỉ định trình thông dịch:

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

1
Gói python3-venvnày cũng cần thiết, ít nhất là trên Ubuntu 14.04.
gioele

Đối với tôi (cũng vào ngày 14.04), gói đã được gọi python3.4-venv.
tobek

trên phiên bản 18.04 cũng vậy
fanny

2

Các bước làm việc cho tôi: Trên MAC OSX 10.9.5

  1. Tải xuống và cài đặt Python-3.4.3 bằng tay .

    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. Tạo một virtualenv.

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

Lưu ý:
virtualenv -p <path to python3> py3envkhông hoạt động:

Error due to zlib

Điều này cũng hoạt động tốt trên Debian 7 (khò khè). Chỉ cần một P3PATH khác
rubo77

Đối với người dùng distro in-a-container dựa trên debian, hãy đảm bảo cài đặt libssl-devzlib1g-devsao cho python được biên dịch với _ssl.so zlib.so
Nehal J Wani

1
On Ubuntu 14.04 

sudo apt-get install python3-pip

sudo pip install virtualenv

virtualenv-3.4 --no-site-packages venv
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.