Các chương trình viết bằng Python trên thực tế thường dùng các gói thư viện và module bên ngoài các thư viện - module có sẵn. Những chương trình này đôi khi cần phiên bản cụ thể của một thư viện nào đó.
Điều này có nghĩa là ít khi nào một bộ thư viện Python duy nhất phù hợp với tất cả các chương trình sử dụng nó. Nếu chương trình A cần phiên bản 1.0 của một module cụ thể nào đó nhưng chương trình B lại cần phiên bản 2.0 của module này, sự xung đột phiên bản sẽ xảy ra. Bạn chỉ có thể cài phiên bản 1.0 hoặc 2.0 của module trên một máy tính, do đó chương trình A hoặc B sẽ không chạy.
Giải pháp xử lý vấn đề này là tạo ra virtual environment, một thư mục chứa phiên bản cụ thể của một thư viện cụ thể, hoặc thậm chí chứa bộ thư viện chuẩn của Python theo phiên bản nào đó.
Các chương trình khác nhau có thể sử dụng các môi trường phân lập (virtual ennviroment) khác nhau để thực thi. Để giải quyết vấn đề xung đột phiên bản thư viện, chương trình A có thể có môi trường phân lập riêng chứa phiên bản 1.0 của thư viện, còn chương trình B lại sử dụng môi trường phân lập khác chứa phiên bản thư viện 2.0. Nếu chương trình B cần nâng cấp phiên bản thư viện lên 3.0 trong virtual enviroment của nó, điều này sẽ không ảnh hưởng gì tới virtual enviroment của A.
Module được sử dụng để tạo và quản lý virtual enviroment có tên là venv
. venv
thường sẽ cài đặt các thư viện Python mới nhất trên máy tính của bạn vào virtual enviroment. Nếu bạn có nhiều phiên bản Python trên máy tính, bạn có thể chọn lựa phiên bản Python bằng lệnh python3
hoặc bất cứ phiên bản Python nào bạn muốn.
Để tạo virtual enviroment, đầu tiên bạn chọn một thư mục, rồi gõ venv
vào OS shell:
python3 -m venv tutorial-env
Lệnh này sẽ tạo thư mục tutorial-env
nếu nó chưa tồn tại, cùng với đó là các thư mục con chứa trình thông dịch Python, các thư viện Python chuẩn và các file cần thiết khác.
Sau khi tạo virtual environment, bạn cần kích hoạt (activate) nó để sử dụng.
Trên Windows, gõ lệnh:
tutorial-env\Scripts\activate.bat
Trên Unix hoặc MacOS, gõ lệnh:
source tutorial-env/bin/activate
(Đoạn lệnh trên được viết cho bash shell. Nếu bạn sử dụng csh hoặc fish shell, sẽ có những script tương ứng là activate.csh
và activate.fish
cho bạn sử dụng.)
Kích hoạt virtual environment sẽ chuyển điều khiển từ OS shell về shell của virtual enviroment bạn đang sử dụng, và lúc này bạn sẽ thấy các thư viện trên virtual enviroment hiện tại khác với thư viện trên virtual enviroment khác. Ví về sự khác biệt giữa phiên bản Python trong và ngoài virtual enviroment:
$ source ~/envs/tutorial-env/bin/activate
(tutorial-env) $ python
Python 3.5.1 (default, May 6 2016, 10:59:36)
...
>>> import sys
>>> sys.path
['', '/usr/local/lib/python35.zip', ...,
'~/envs/tutorial-env/lib/python3.5/site-packages']
>>>
Bạn có thể cài đặt, nâng cấp, xóa bỏ các gói thư viện bằng một chương trình tên là pip. Mặc định, pip
sẽ cài đặt các gói thư viện nằm trên Python Package Index, <https://pypi.python.org/pypi>. Bạn có thể tìm hiểu các gói thư viện này bằng cách vào trang web của Python Package Index hoặc tìm kiếm thông qua lệnh pip
trên shell:
(tutorial-env) $ pip search astronomy
skyfield - Elegant astronomy for Python
gary - Galactic astronomy and gravitational dynamics.
novas - The United States Naval Observatory NOVAS astronomy library
astroobs - Provides astronomy ephemeris to plan telescope observations
PyAstronomy - A collection of astronomy related tools for Python.
...
pip
có nhiều câu lệnh con: "search", "install", "uninstall", "freeze", v.v.. (Tham khảo Installing Python Modules để hiểu đầy đủ hơn về pip
.)
Bạn có thể cài phiên bản mới nhất của gói thư viện bất kỳ bằng cách nhập tên gói thư viện ấy vào shell:
(tutorial-env) $ pip install novas
Collecting novas
Downloading novas-3.1.1.3.tar.gz (136kB)
Installing collected packages: novas
Running setup.py install for novas
Successfully installed novas-3.1.1.3
Bạn có thể cài đặt một phiên bản cụ thể của gói thư viện bằng cách thêm dấu ==
và số phiên bản mong muốn:
(tutorial-env) $ pip install requests==2.6.0
Collecting requests==2.6.0
Using cached requests-2.6.0-py2.py3-none-any.whl
Installing collected packages: requests
Successfully installed requests-2.6.0
Nếu bạn chạy lệnh dưới đây, pip
sẽ thông báo phiên bản mà bạn mong muốn đã được cài đặt từ trước. Bạn có thể chỉ định cài đặt một phiên bản khác bằng việc bổ sung thêm số phiên bản sau tên thư viện, hoặc chạy pip install --upgrade
để nâng cấp gói thư viện tới bản mới nhất:
(tutorial-env) $ pip install --upgrade requests
Collecting requests
Installing collected packages: requests
Found existing installation: requests 2.6.0
Uninstalling requests-2.6.0:
Successfully uninstalled requests-2.6.0
Successfully installed requests-2.7.0
Lệnh pip uninstall
đặt phía trước tên các package có tác dụng xóa các package này khỏi virtual enviroment.
Lệnh pip show
đặt phía trước tên package sẽ hiển thị thông tin về package đó:
(tutorial-env) $ pip show requests
---
Metadata-Version: 2.0
Name: requests
Version: 2.7.0
Summary: Python HTTP for Humans.
Home-page: http://python-requests.org
Author: Kenneth Reitz
Author-email: [email protected]
License: Apache 2.0
Location: /Users/akuchling/envs/tutorial-env/lib/python3.4/site-packages
Requires:
Lệnh pip list
sẽ hiển thị tất cả các gói thư viện đã được cài đặt trong virtual enviroment:
(tutorial-env) $ pip list
novas (3.1.1.3)
numpy (1.9.2)
pip (7.0.3)
requests (2.7.0)
setuptools (16.0)
Lệnh pip freeze
cũng sẽ hiển thị tất cả các gói thư viện đã được cài đặt, nhưng kết quả trả về sẽ được trình bày sao cho phù hợp để làm đầu vào cho lệnh pip install
. Thông thường kết quả này sẽ được ghi ra file requirements.txt
:
(tutorial-env) $ pip freeze > requirements.txt
(tutorial-env) $ cat requirements.txt
novas==3.1.1.3
numpy==1.9.2
requests==2.7.0
File requirements.txt
có thể được dùng như một file cài đặt của chương trình Python. Người dùng có thể cài đặt tất cả các gói thư viện cần thiết với bằng cách thêm tham số install -r
:
(tutorial-env) $ pip install -r requirements.txt
Collecting novas==3.1.1.3 (from -r requirements.txt (line 1))
...
Collecting numpy==1.9.2 (from -r requirements.txt (line 2))
...
Collecting requests==2.7.0 (from -r requirements.txt (line 3))
...
Installing collected packages: novas, numpy, requests
Running setup.py install for novas
Successfully installed novas-3.1.1.3 numpy-1.9.2 requests-2.7.0
pip
còn nhiều tham số khác nữa cho bạn sử dụng. Tham khảo thêm Installing Python Modules để biết rõ hơn về pip
. Nếu bạn có một gói thư viện của riêng mình và muốn nó xuất hiện trên Python Package Index, tham khảo cách làm tại Distributing Python Modules.