Cách thích hợp để cài đặt pip, virtualenv và phân phối cho Python là gì?


247

Câu hỏi ngắn

Lý lịch

Trong câu trả lời của tôi cho câu hỏi SO 4314376 , tôi khuyên bạn nên sử dụng ez_setupđể sau đó bạn có thể cài đặt pipvirtualenvnhư sau:

curl -O http://peak.telecommunity.com/dist/ez_setup.py
sudo python ez_setup.py
sudo easy_install pip
sudo pip install virtualenv

Ban đầu tôi đã rút các hướng dẫn này từ bài đăng trên blog của Jesse Noller Vì vậy, bạn muốn sử dụng Python trên Mac? . Tôi thích ý tưởng giữ một thư mục gói trang web toàn cầu sạch sẽ, vì vậy các gói khác tôi cài đặt có virtualenvwrapperdistribute. (Gần đây tôi đã thêm vào distributehộp công cụ của mình vì thông báo dịch vụ công cộng Python này . Để cài đặt hai gói này, tôi đã sử dụng:

sudo pip install virtualenvwrapper
curl -O http://python-distribute.org/distribute_setup.py
sudo python distribute_setup.py

Không có thêm setuptools và easy_install

Để thực sự làm theo thông báo dịch vụ công cộng Python đó , trên bản cài đặt Python mới, tôi sẽ làm như sau:

curl -O http://python-distribute.org/distribute_setup.py
sudo python distribute_setup.py
sudo easy_install pip
sudo pip install virtualenv
sudo pip install virtualenvwrapper

Sự quở trách của Glyph

Trong một bình luận cho câu trả lời của tôi cho câu hỏi SO 4314376 , người dùng SO Glyph đã nêu:

KHÔNG. KHÔNG BAO GIỜ làm sudo python setup.py installbất cứ điều gì. Viết một ~ / .pydistutils.cfg đặt cài đặt pip của bạn vào ~ / .local hoặc một cái gì đó. Đặc biệt là các tệp có tên ez_setup.pycó xu hướng giảm các phiên bản mới hơn của những thứ như setuptools và easy_install, có khả năng phá vỡ những thứ khác trên hệ điều hành của bạn.

Quay lại câu hỏi ngắn

Vì vậy, câu trả lời của Glyph dẫn tôi đến câu hỏi ban đầu của tôi:


Matthew, tôi biết chủ đề này là khá cũ. Nhưng có gì mới trên mặt trận này? Nó vẫn là một ý tưởng tồi để làm python distribute_setup.pytheo easy_install pipvirtualenv --distribute venv? (xem python-guide.readthedocs.org/en/latest/starting/install/iêu ), và nếu vậy, tại sao?
Amelio Vazquez-Reina

2
Có chuyện gì với sudo apt-get install python-{pip,virtualenv}???
MestreLion

1
Có, nói chung, các gói cũ hơn nhưng tương thích đều ổn khi các phiên bản nhỏ không quan trọng cho mục đích của bạn, nhưng bạn đã hỏi cụ thể "có gì không ổn" và tôi đang cố lấy huy hiệu của tôi.

2
FYI, một số liên kết trong câu hỏi này đều là lỗi thời / vỡ - Tôi hiện (không thể) thấy những người đến pip, virtualenvvà Python PSA.
Chris Sprague

1
http://python-distribute.org/distribute_setup.pychuyển hướng đến 404 :(
jitter

Câu trả lời:


173

Bạn có thể làm điều này mà không cần cài đặt bất cứ thứ gì vào python.

Bạn không cần sudo hoặc bất kỳ đặc quyền.

Bạn không cần phải chỉnh sửa bất kỳ tập tin.

Cài đặt virtualenv vào môi trường ảo bootstrap. Sử dụng môi trường ảo đó để tạo thêm. Vì virtualenv vận chuyển với pip và phân phối, bạn có được mọi thứ từ một lần cài đặt.

  1. Tải về virtualenv:
  2. Giải nén tarball nguồn
  3. Sử dụng tarball đã giải nén để tạo một môi trường ảo sạch. Môi trường ảo này sẽ được sử dụng để "bootstrap" cho người khác. Tất cả các môi trường ảo của bạn sẽ tự động chứa pip và phân phối.
  4. Sử dụng pip, cài đặt virtualenv vào môi trường bootstrap đó.
  5. Sử dụng môi trường bootstrap đó để tạo thêm!

Đây là một ví dụ trong bash:

# Select current version of virtualenv:
VERSION=12.0.7
# Name your first "bootstrap" environment:
INITIAL_ENV=bootstrap
# Set to whatever python interpreter you want for your first environment:
PYTHON=$(which python)
URL_BASE=https://pypi.python.org/packages/source/v/virtualenv

# --- Real work starts here ---
curl -O $URL_BASE/virtualenv-$VERSION.tar.gz
tar xzf virtualenv-$VERSION.tar.gz
# Create the first "bootstrap" environment.
$PYTHON virtualenv-$VERSION/virtualenv.py $INITIAL_ENV
# Don't need this anymore.
rm -rf virtualenv-$VERSION
# Install virtualenv into the environment.
$INITIAL_ENV/bin/pip install virtualenv-$VERSION.tar.gz

Bây giờ bạn có thể sử dụng môi trường "bootstrap" của mình để tạo thêm:

# Create a second environment from the first:
$INITIAL_ENV/bin/virtualenv py-env1
# Create more:
$INITIAL_ENV/bin/virtualenv py-env2

Đi hạt dẻ!

Ghi chú

Điều này giả định rằng bạn không sử dụng phiên bản virtualenv thực sự cũ. Các phiên bản cũ yêu cầu các cờ --no-site-packges(và tùy thuộc vào phiên bản Python, --distribute). Bây giờ bạn có thể tạo môi trường bootstrap của bạn chỉ bằng python virtualenv.py path-to-bootstraphoặc python3 virtualenv.py path-to-bootstrap.


13
Tàn nhẫn chỉ bởi vì nó rất chung chung, một bản tải xuống đơn giản, cho đến khi python virtualenv.py TARGET_DIRECTORYthực hiện điều tương tự.
Sebastian Blask

3
Điều này thật tuyệt vời. Tôi đã điều chỉnh nó để trả lời câu hỏi cụ thể hơn của mình về việc cài đặt virtualenv trên nhiều phiên bản Python tùy ý của các gói hệ thống - stackoverflow.com/questions/6812207/ trộm - hoạt động hoàn hảo.
david.libremone

6
lưu ý: hiện tại virtualenvkhông cần các tùy chọn '--no-site-gói - phân phối'. Điều ngược lại --system-site-packagescó thể được yêu cầu
jfs

1
Bạn có thể nhận được tarball ổn định mới nhất bằng lệnh này:curl -Lo virtualenv-tmp.tar.gz 'https://github.com/pypa/virtualenv/tarball/master'
Bohr

1
Bạn cài đặt ở virtualenvwrapperđâu? Các tài liệu cảnh báo cụ thể không cài đặt nó trong virtualenv (mặc dù nó có vẻ hoạt động ).
Aryeh Leib Taurog

21

Tôi nghĩ Glyph có nghĩa là làm một cái gì đó như thế này:

  1. Tạo một thư mục ~/.local, nếu nó không tồn tại.
  2. Trong của bạn ~/.bashrc, đảm bảo rằng đó ~/.local/binlà trên PATHvà đó ~/.locallà trên PYTHONPATH.
  3. Tạo một tập tin ~/.pydistutils.cfgcó chứa

    [install]
    prefix=~/.local

    Đó là một tệp định dạng ConfigParser tiêu chuẩn.

  4. Tải về distribute_setup.py và chạy python distribute_setup.py(không sudo). Nếu nó phàn nàn về một thư mục không tồn tại site-packages, hãy tạo nó theo cách thủ công:

    mkdir -p ~ / .local / lib / python2.7 / site-gói /

  5. Chạy which easy_installđể xác minh rằng nó đến từ~/.local/bin

  6. Chạy pip install virtualenv
  7. Chạy pip install virtualenvwrapper
  8. Tạo một env ảo chứa thư mục, nói ~/.virtualenvs
  9. trong ~/.bashrcadd

    export WORKON_HOME
    source ~/.local/bin/virtualenvwrapper.sh

Đó là nó, hoàn toàn không sử dụng sudovà môi trường Python của bạn ~/.localhoàn toàn tách biệt với Python của HĐH. Tuyên bố miễn trừ trách nhiệm: Không chắc mức độ tương thích virtualenvwrappertrong kịch bản này - Tôi không thể kiểm tra nó trên hệ thống của mình :-)


2
Là ~ / .local một chút của một tên ngu ngốc? Nếu Ruby muốn làm điều tương tự thì sao? Có lẽ ~ / .python27 sẽ tốt hơn?
Jonathan Hartley

1
Chỉ cần một lưu ý, tôi vừa thử điều tương tự trên Windows và phải thêm cả thư mục cục bộ (ví dụ như "cục bộ") và "local \ Lib \ site-gói" vào PYTHONPATH để chạy thành công phân phối_setup.py.
technomalogical

1
Một vấn đề cuối cùng với cách tiếp cận này: virtualenv không tương thích với việc sử dụng tệp .pydistutils.cfg. Xem github.com/pypa/virtualenv/issues/88
Dan

3
Tôi nghĩ rằng nên có một easy_install pipkhoảng giữa bước 5 và 6.
SiggyF

5
Điều ~ / .local đến từ PEP 370.
Éric Araujo

16

Nếu bạn làm theo các bước được tư vấn trong một số hướng dẫn mà tôi đã liên kết trong câu trả lời này , bạn có thể nhận được hiệu quả mong muốn mà không cần các bước "thủ công" hơi phức tạp trong câu trả lời của Walker và Vinay. Nếu bạn đang sử dụng Ubuntu:

sudo apt-get install python-pip python-dev

Tương đương đạt được trong OS X bằng cách sử dụng homebrew để cài đặt python (chi tiết hơn ở đây ).

brew install python

Khi pipđã cài đặt, bạn có thể sử dụng nó để nhận các gói còn lại (bạn có thể bỏ qua sudotrong OS X, vì bạn đang sử dụng cài đặt python cục bộ của mình).

sudo pip install virtualenvwrapper

(đây là các gói duy nhất bạn cần cài đặt trên toàn cầu và tôi nghi ngờ rằng nó sẽ đụng độ với mọi cấp độ hệ thống từ HĐH. Nếu bạn muốn siêu an toàn, bạn có thể giữ các phiên bản của bản phân phối sudo apt-get install virtualenvwrapper)

Lưu ý: trong Ubuntu 14.04 tôi nhận được một số lỗi khi cài đặt pip , vì vậy tôi sử dụng pip3 install virtualenv virtualenvwrappervà thêm VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3vào .bashrc/.zshrctệp của mình .

Sau đó bạn thêm vào .bashrctập tin của bạn

export WORKON_HOME
source /usr/local/bin/virtualenvwrapper.sh

và nguồn nó

. ~/.bashrc

Đây là cơ bản nó. Bây giờ quyết định duy nhất là bạn có muốn tạo virtualenv để bao gồm các gói cấp hệ thống không

mkvirtualenv --system-site-packages foo

trong đó các gói hệ thống hiện tại của bạn không phải cài đặt lại, chúng được liên kết với các phiên bản của trình thông dịch hệ thống. Lưu ý: bạn vẫn có thể cài đặt các gói mới và nâng cấp các gói đi kèm từ hệ thống hiện có mà không cần sudo - Tôi đã thử nghiệm và nó hoạt động mà không có sự gián đoạn của trình thông dịch hệ thống.

kermit@hocus-pocus:~$ sudo apt-get install python-pandas
kermit@hocus-pocus:~$ mkvirtualenv --system-site-packages s
(s)kermit@hocus-pocus:~$ pip install --upgrade pandas
(s)kermit@hocus-pocus:~$ python -c "import pandas; print(pandas.__version__)"
0.10.1
(s)kermit@hocus-pocus:~$ deactivate
kermit@hocus-pocus:~$ python -c "import pandas; print(pandas.__version__)"
0.8.0

Thay thế, nếu bạn muốn một môi trường tách biệt hoàn toàn, là

mkvirtualenv --no-site-packages bar

hoặc cho rằng đây là tùy chọn mặc định, chỉ đơn giản là

mkvirtualenv bar

Kết quả là bạn có một virtualenv mới, nơi bạn có thể tự do và cài đặt các gói yêu thích của mình một cách tự do

pip install flask

Điều này không cài đặt cả setuptools và phân phối? Và không phá vỡ các gói như Tkinter và pyopencl không thích setuptools?
hobs

Việc đặt WORKON_HOME thành null trong bashrc có buộc venvwrapper sử dụng một cái gì đó hợp lý như thế export WORKON_HOME="$HOME/.virtualenvs"nào không?
hobs

Chà, nó cài đặt bất cứ thứ gì mà người quản lý gói của bạn nói là pip phụ thuộc vào. Hiện tại, đó là setuptools trong Ubuntu và OS X ( brew install pythonkéo pip + setuptools vào). Cách tiếp cận này hoạt động tốt cho tôi. Ngoài ra, tập trung vào pip dường như cũng là con đường tương lai trong bao bì Python.
metakermit

1
WORKON_HOMEmặc định là ~/.virtualenvscó Có một dòng trong /usr/local/bin/virtualenvwrapper.shbộ đó workon_home_dir="$HOME/.virtualenvs" if [ "$workon_home_dir" = "" ].
metakermit

Hiểu rồi. Cảm ơn. Cách tiếp cận đơn giản của bạn đã giúp tôi rất nhiều trên Ubuntu 12.04 khi cài đặt các mô-đun rất khó sử dụng phân phối (pyopencl). Thủ thuật cho tôi là theo dõi pip install virtualenv virtualenv-wrapperdòng của bạn với pip install --upgrade distributevirtualenv được kích hoạt mà sau đó tôi đã cài đặt pyopencl. Tôi cũng đã thêm vào export PROJECT_HOME="$HOME/src"bashrc của mình để kích hoạt mkprojectcông cụ venv thú vị.
hobs

12

Python 3,4 trở đi

Python 3.3 thêm mô-đun venv và Python 3.4 thêm mô-đun bảo đảm . Điều này làm cho pip bootstrapping dễ dàng như:

trăn -m đảm bảo

Có lẽ trước một lời kêu gọi venvlàm như vậy trong một môi trường ảo.

Pip đảm bảo được mô tả trong PEP 453 .


10

Trên Ubuntu:

sudo apt-get install python-virtualenv

Gói python-pipnày là một phụ thuộc, vì vậy nó cũng sẽ được cài đặt.


1
python-virtualenv sẽ cài đặt cả virtualenv và pip. Sau đó, chỉ cần chạy virtualenv để tạo môi trường ảo Python. Và chạy pip từ trong env ảo để cài đặt các gói khác.
jemeshsu

2
Đây thực sự là lựa chọn sanest. cách "thích hợp" để cài đặt mọi thứ trong HĐH của bạn là sử dụng hệ thống cài đặt HĐH của bạn ! Sau đó, bạn có thể chơi cùng pip, tốt nhất là trong một virtualenv, và không bao giờ sử dụng sudocho một trong hai
MestreLion

Thật không may, hệ điều hành được cung cấp phiên bản pipđôi khi có lỗi đáng kể, vì vậy tôi thường kết thúc bằng cách sử dụng get-pip.pyđược cung cấp trên python.org.
RichVel

@RichVel bạn có thể giải thích những lỗi đáng kể bạn gặp phải không?
danielpops

1
@danielpops - một ví dụ là sự cố pip này trên Ubuntu 16.04.1, nhưng có thể có các vấn đề khác với các phiên bản và trường hợp sử dụng nhất định.
RichVel

5

Tôi đã làm thủ tục này cho chúng tôi sử dụng tại nơi làm việc.

cd ~
curl -s https://pypi.python.org/packages/source/p/pip/pip-1.3.1.tar.gz | tar xvz
cd pip-1.3.1
python setup.py install --user
cd ~
rm -rf pip-1.3.1

$HOME/.local/bin/pip install --user --upgrade pip distribute virtualenvwrapper

# Might want these three in your .bashrc
export PATH=$PATH:$HOME/.local/bin
export VIRTUALENVWRAPPER_VIRTUALENV_ARGS="--distribute"
source $HOME/.local/bin/virtualenvwrapper.sh

mkvirtualenv mypy
workon mypy
pip install --upgrade distribute
pip install pudb # Or whatever other nice package you might want.

Điểm chính cho an ninh có đầu óc:

  1. curl không xác nhận ssl. wget không.
  2. Bắt đầu từ pip 1.3.1, pip cũng thực hiện xác nhận ssl.
  3. Ít người dùng có thể tải lên tarball pypi hơn một tarball github.

5

Cập nhật: Kể từ tháng 7 năm 2013, dự án này không còn được duy trì. Tác giả đề nghị sử dụng pyenv . (pyenv không có hỗ trợ tích hợp cho virtualenv, nhưng chơi rất hay với nó.)

Pythonbrew là trình quản lý phiên bản cho python và có hỗ trợ cho virtualenv.

Sau khi cài đặt pythonbrew và phiên bản python sử dụng venvs thực sự dễ dàng:

# Initializes the virtualenv 
pythonbrew venv init

# Create a virtual/sandboxed environment 
pythonbrew venv create mycoolbundle  

# Use it 
pythonbrew venv use mycoolbundle

@ kermit666 cảm ơn. Điều gì sẽ là cách ưa thích để đánh dấu câu trả lời của tôi là lỗi thời? Chỉ cần xóa nó?
kioopi

1
tốt, bạn có thể để nguyên như vậy (có hướng dẫn sử dụng pyenv cho những người theo liên kết từ nhận xét của tôi, tương tự như khái niệm với pythonbrew mà bạn đề xuất) hoặc tốt hơn là chỉnh sửa câu trả lời với ví dụ: Cập nhật tháng 9 năm 2013 bởi nối các hướng dẫn mới. Có thể pythonbrew sẽ hoạt động trở lại trong tương lai vì vậy tôi sẽ không xóa hướng dẫn cũ của bạn. Để biết thêm thông tin xem meta .
metakermit

Xem câu trả lời của tôi về pyenv, mà hoạt động tốt.
RichVel

3

Không có vấn đề gì khi cài đặt sudo python setup.py, nếu bạn chắc chắn đó là điều bạn muốn làm.

Sự khác biệt là nó sẽ sử dụng thư mục gói trang web của HĐH của bạn làm đích cho các tệp .py được sao chép.

Vì vậy, nếu bạn muốn pip có thể truy cập os rộng, có lẽ đó là cách để đi. Tôi không nói rằng cách người khác là xấu, nhưng điều này có lẽ là đủ công bằng.


1
Vâng, tôi đã sử dụng theo cách đó. Và một thời gian sau, việc gọi pip freezecho tôi gần như bị đóng băng - danh sách các gói, được cài đặt trên toàn hệ thống là quá dài. Kể từ đó, tôi thực sự khuyên bạn nên sử dụng cài đặt gói python "no sudo" và "no os-wide".
Jan Vlcinsky


2

Tôi đã gặp vấn đề tương tự gần đây. Tôi trở thành một phần hơn đối với những người dùng luôn sử dụng tư duy virtualenv, vì vậy vấn đề của tôi là cài đặt virtualenv với pip mà không cài đặt phân phối vào thư mục gói trang web toàn cầu hoặc người dùng của tôi. Để thực hiện việc này, tôi đã tải xuống phân phối, pip và virtualenv theo cách thủ công và với mỗi lần tôi chạy, cài đặt python setup.py cài đặt --prefix ~ / .local / python-private ((với cài đặt tạm thời là PYTHONPATH = ~ / .local / python-private) để các tập lệnh thiết lập có thể tìm phân phối). Tôi đã chuyển tập lệnh virtualenv sang một thư mục khác mà tôi có trên PATH của mình và chỉnh sửa nó để có thể tìm thấy các mô-đun phân phối và virtualenv trên sys.path. Tada: Tôi không cài đặt bất cứ thứ gì vào / usr, / usr / local hoặc thư mục gói trang web người dùng của tôi, nhưng tôi có thể chạy virtualenv ở bất cứ đâu, và trong đó virtualenv tôi nhận được pip.



2

Tôi đã gặp nhiều vấn đề khác nhau (xem bên dưới) khi cài đặt các mô-đun SSL được nâng cấp, ngay cả trong một virtualenv, bên trên các phiên bản Python cũ do OS cung cấp, vì vậy tôi hiện đang sử dụng pyenv.

pyenv giúp dễ dàng cài đặt phiên bản Python mới và hỗ trợ virtualenvs. Bắt đầu là nhiều dễ dàng hơn so với công thức nấu ăn cho virtualenv liệt kê trong câu trả lời khác:

  • Trên Mac, gõ brew install pyenvvà trên Linux, sử dụng trình cài đặt pyenv
  • điều này giúp bạn hỗ trợ virtualenv tích hợp cũng như chuyển đổi phiên bản Python (nếu cần)
  • hoạt động tốt với Python 2 hoặc 3, có thể cài đặt nhiều phiên bản cùng một lúc

Điều này hoạt động rất tốt để cách nhiệt phiên bản "Python mới" và virtualenv từ hệ thống Python. Vì bạn có thể dễ dàng sử dụng Python gần đây hơn (bài 2.7.9), các mô-đun SSL đã được nâng cấp và tất nhiên giống như mọi thiết lập virtualenv hiện đại mà bạn được cách ly khỏi các mô-đun Python của hệ thống.

Một vài hướng dẫn tốt đẹp:

Các pyenv-virtualenvplugin hiện được tích hợp sẵn pyenv commands | grep virtualenvđể kiểm tra. Tôi sẽ không sử dụng plugin pyenv-virtualenvwrapper để bắt đầu - hãy xem cách bạn tiếp tục với pyenv-virtualenv được tích hợp nhiều hơn vào pyenv, vì điều này bao gồm hầu hết những gì virtualenvwrapper làm.

pyenvđược mô hình hóa rbenv(một công cụ tốt để chuyển đổi phiên bản Ruby) và sự phụ thuộc duy nhất của nó là bash.

  • pyenv không liên quan đến cái tên rất giống nhau pyvenv- đó là tương đương virtualenv, một phần của các phiên bản Python 3 gần đây và không xử lý chuyển đổi phiên bản Python

Hãy cẩn thận

Hai cảnh báo về pyenv:

  1. Nó chỉ hoạt động từ bash hoặc shell tương tự - hay cụ thể hơn là plugin pyenv-virtualenv không thích dash, có /bin/shtrên Ubuntu hoặc Debian.
  2. Nó phải được chạy từ vỏ đăng nhập tương tác (ví dụ: bash --loginsử dụng thiết bị đầu cuối), điều này không phải lúc nào cũng dễ dàng đạt được với các công cụ tự động hóa như Ansible .

Do đó pyenv là tốt nhất để sử dụng tương tác, và ít tốt hơn cho các máy chủ kịch bản.

Sự cố mô-đun SSL

Một lý do để sử dụng pyenvlà thường có vấn đề với việc nâng cấp các mô-đun SSL SSL khi sử dụng các phiên bản Python do hệ thống cũ cung cấp:


2
  • Bạn có thể làm điều này mà không cần cài đặt bất cứ thứ gì vào python.

  • Bạn không cần sudo hoặc bất kỳ đặc quyền.

  • Bạn không cần tìm phiên bản mới nhất của virtualenvtệp tar

  • Bạn không cần chỉnh sửa thông tin phiên bản trong tập lệnh bash để cập nhật mọi thứ.

  • Bạn không cần curl/ wgethoặc tarcài đặt, cũng không piphoặceasy_install

  • cái này hoạt động cho 2.7 cũng như cho 3.X

Lưu các mục sau vào /tmp/initvenv.py:

từ print_feft nhập trong tương lai

import os, sys, shutil, tempfile, subprocess, tarfile, hashlib

try:
    from urllib2 import urlopen
except ImportError:
    from urllib.request import urlopen

tmp_dir = tempfile.mkdtemp(prefix='initvenv_')
try:
    # read the latest version from PyPI
    f = urlopen("https://pypi.python.org/pypi/virtualenv/")
    # retrieve the .tar.gz file
    tar_found = False
    url = None
    sha256 = None
    for line in f.read().splitlines():
        if isinstance(line, bytes):
            line = line.decode('utf-8')
        if tar_found:
            if 'sha256' in line:
                sha256 = line.split('data-clipboard-text')[1].split('"')[1]
                break
            continue
        if not tar_found and 'tar.gz">' not in line:
            continue
        tar_found = True
        for url in line.split('"'):
            if url.startswith('https'):
                break
    else:
        print('tar.gz not found')
        sys.exit(1)
    file_name = url.rsplit('/', 1)[1]
    print(file_name)
    os.chdir(tmp_dir)
    data = urlopen(url).read()
    data_sha256 = hashlib.sha256(data).hexdigest()
    if sha256 != data_sha256:
        print('sha256 not correct')
        print(sha256)
        print(data_sha256)
        sys.exit(1)
    with open(file_name, 'wb') as fp:
        fp.write(data)
    tar = tarfile.open(file_name)
    tar.extractall()
    tar.close()
    os.chdir(file_name.replace('.tar.gz', ''))
    print(subprocess.check_output([sys.executable, 'virtualenv.py'] +
                                  [sys.argv[1]]).decode('utf-8'), end='')
    if len(sys.argv) > 2:
        print(subprocess.check_output([
            os.path.join(sys.argv[1], 'bin', 'pip'), 'install', 'virtualenv'] +

            sys.argv[2:]).decode('utf-8'), end='')
except:
    raise
finally:
    shutil.rmtree(tmp_dir)  # always clean up

và sử dụng nó như

python_binary_to_use_in_venv /tmp/initvenv.py your_venv_name [optional packages]

ví dụ (nếu bạn thực sự cần distributelớp tương thích cho setuptools)

python /tmp/initvenv.py venv distribute

Xin lưu ý rằng, với các phiên bản python cũ hơn, điều này có thể cung cấp cho bạn InsecurePlatformWarnings.

Khi bạn đã có virtualenv (tên, ví dụ venv), bạn có thể thiết lập một virtualenv khác bằng cách sử dụng virtualenvchỉ cần cài đặt:

venv/bin/virtualenv venv2

virtualenvwrapper

Tôi cũng khuyên bạn nên xem virtualenvwrapper , sau khi thiết lập một lần:

% /opt/python/2.7.10/bin/python /tmp/initvenv.py venv virtualenvwrapper

và kích hoạt (có thể được thực hiện từ tập lệnh đăng nhập của bạn):

% source venv/bin/virtualenvwrapper.sh

bạn có thể làm những việc như:

% mktmpenv 
New python executable in tmp-17bdc3054a46b2b/bin/python
Installing setuptools, pip, wheel...done.
This is a temporary environment. It will be deleted when you run 'deactivate'.
(tmp-17bdc3054a46b2b)% 

¹ tôi đã không tìm thấy một cách để ngăn chặn cảnh báo. Nó có thể được giải quyết trong pipvà / hoặc request, nhưng các nhà phát triển chỉ ra nhau là nguyên nhân. Tôi nhận được khuyến nghị, thường là không thực tế, để nâng cấp phiên bản python mà tôi đang sử dụng lên phiên bản mới nhất. Tôi chắc chắn rằng điều này sẽ phá vỡ, ví dụ như cài đặt Linux Mint 17 của tôi. May mắn thay, piplưu trữ các gói, vì vậy Cảnh báo chỉ được thực hiện một lần cho mỗi lần cài đặt gói.


Cảnh báo InsecurePlatformWarning(tức là cảnh báo nếu Python cũ hơn phiên bản 2.7.9) có thể được sửa bằng cách cài đặt các gói bổ sung pyopenssl, pyasn1, ndg-httpsclient từ PyPI. (Nó hỗ trợ SSL, giải mã chứng chỉ, https thông qua PyOpenSSL.) Nếu không có giao thức đúng, nó thực sự không đủ an toàn để tải xuống và chạy bất kỳ mã nào.
hynekcer

@hynekcer Tôi sẽ thử. Tôi tự hỏi tại sao pip và / hoặc yêu cầu không được thực hiện phụ thuộc vào các gói đó cho các phiên bản python (cũ) phù hợp.
Anthon

0

Có hướng dẫn tốt trên trang web chính thức của Virtualenv. https://pypi.python.org/pypi/virtualenv

Về cơ bản những gì tôi đã làm, được cài đặt pipvới sudo easy_install pip, sau đó được sử dụng sudo pip install virtualenvsau đó tạo ra một môi trường với: virtualenv my_env(đặt tên nó là những gì bạn muốn), theo đó tôi đã làm : virtualenv --distribute my_env; đã cài đặt distributepiptrong virtualenv của tôi.

Một lần nữa, làm theo hướng dẫn trên virtualenvtrang.

Một loại rắc rối, đến từ Ruby; P


0

Đây là một cách hay để cài đặt virtualenvwrapper (cập nhật cái này ).

Tải về virtualenv-1.11.4 (bạn có thể tìm thấy mới nhất tại đây ), Giải nén nó, mởterminal

# Create a bootstrapenv and activate it:
$ cd ~
$ python <path to unzipped folder>/virtualenv.py bootstrapenv
$ source bootstrapenv/bin/activate

# Install virtualenvwrapper:
$ pip install virtualenvwrapper
$ mkdir -p ~/bootstrapenv/Envs

# append it to file `.bashrc`
$ vi ~/.bashrc
  source ~/bootstrapenv/bin/activate
  export WORKON_HOME=~/bootstrapenv/Envs
  source ~/bootstrapenv/bin/virtualenvwrapper.sh

# run it now.
$ source ~/.bashrc

Thế là xong, bây giờ bạn có thể sử dụng mkvirtualenv env1, lsvirtualenv..vv

Lưu ý: bạn có thể xóa virtualenv-1.11.4virtualenv-1.11.4.ziptừ các thư mục Tải xuống.


0

Tin vui là nếu bạn đã cài đặt python3.4, pyvenv đã được cài đặt. Vì vậy chỉ cần

pyvenv project_dir
source project_dir/bin/activate
python --version   
python 3.4.*

Bây giờ trong env ảo này, bạn có thể sử dụng pip để cài đặt các mô-đun cho dự án này.

Để lại env ảo này, chỉ

deactivate
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.