Skip to content

Latest commit

 

History

History
160 lines (121 loc) · 8.62 KB

12.-virtual-environments-and-packages.md

File metadata and controls

160 lines (121 loc) · 8.62 KB

12. Virtual Environments and Packages

12.1. Giới thiệu

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.

12.2. Tạo môi trường phân lập (Virtual Environment)

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.cshactivate.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']
>>>

12.3. Quản lý các gói thư viện bằng pip

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.