Pipenv la gi

pipenv là gì?

Chắc hẳn bạn đã quen thuộc với pip, package installer của Python. Nếu so sánh pip với các package manager của ngôn ngữ khác như npm hay yarn (NodeJS), cargo (Rust),... thì thật đáng chán vì tool này chỉ hỗ trợ chủ yếu việc install packages còn tính năng lock versions thì rất sơ khai (thông qua pip freeze). Chính vì vậy pipenv được phát triển để kết hợp giữa pip và virtualenv (cũng của cùng PyPa) "vay mượn" các tính năng cao cấp hơn từ package manager khác.

Các lệnh cơ bản khi sử dụng pipenv như sau:

pipenv --python 3.7 # Tạo ra virtual environment và 2 file Pipfile và Pipfile.lock khi bạn khởi tạo project mới pipenv shell # Để khởi chạy terminal trong virtual environment pipenv install # Cài đặt tất cả packages từ Pipfile và Pipfile.lock (tương tự như "npm install")

Để tìm hiểu sâu hơn về pipenv bạn tham khảo ở đây nhé https://pipenv.pypa.io/en/latest/

Khi đã cài đặt Python extension (official version của Microsoft) trong VSCode, mặc định VSCode có thể tự động nhận dạng các virtual environments được tạo trong máy của bạn. Tuy nhiên, ở thời điểm hiện tại extension này vẫn chưa hỗ trợ path được tạo bởi pipenv. Cách duy nhất là phải khai báo pythonPath tường minh trong .vscode/settings.json.

Để lấy được path của virtual environment được tạo ra bởi pipenv, trước hết bạn cần vào trong thư mục root của project (cùng cấp với Pipfile) và chạy lệnh pipenv --python. Ví dụ bên máy mình (MacOS) sẽ có path dạng như sau: /Users/khoatran/.local/share/virtualenvs/example-project-M27OqWV-/bin/python

Tiếp theo bạn cần chỉnh sửa pythonPath trong file settings.json. Bạn có thể dùng giao diện của VSCode để chọn Open Workspace Settings (JSON), hoặc tạo thư mục .vscode và file settings.json bằng tay. Nội dung của file settings.json nên là như sau:

{ "python.pythonPath": "", "files.exclude": { "**/.git": true, "**/.svn": true, "**/.hg": true, "**/CVS": true, "**/.DS_Store": true, "**/*.pyc": true, "**/__pycache__": true } }

Ngoài ra để VSCode chạy được pylint khi code, bạn có thể cài đặt thêm thư viện này dưới dạng dev dependencies như sau: pipenv install --dev pylint.

Như vậy là xong, những tính năng như autocomplete hay terminal với virtualenv trong VSCode đã được tích hợp ổn với pipenv. Hy vọng hướng dẫn nhỏ này có thể giúp ích được cho bạn :)

ktgeek 09-04-2020

Tiền đề bài viết

Khi các bạn tìm hiểu về Python, ở mức độ cơ bản (kiểu dữ liệu cơ bản, các toán tử, cấu trúc điều khiển…vv) sẽ không có gì đáng nói. Tuy nhiên, khi tiến xa hơn một bước nữa vào lĩnh vực mà bạn quan tâm (IoT, Web, AI…vv) các bạn sẽ cần sử dụng thêm các thư viện, framework. Lúc này, sẽ có rất nhiều vấn đề mới phát sinh như:

  • Các bạn tìm được một cuốn sách, một bài hướng dẫn trên internet, làm theo, nhưng mã nguồn của các bạn không hoạt động, do sai phiên bản.
  • Các bạn không thể cài được thư viện, do các gói phụ thuộc đã tồn tại và đang sai phiên bản.
  • Compiler thông báo một hàm hoặc một tham số nào đó trong mã nguồn của bạn không hợp lệ.

Những vấn đề phát sinh đó từ đâu ra? Các bạn có thể hình dung một cách đơn giản, khi cài một thư viện A, hệ thống sẽ cài thêm những thư viện mà thư viện A phụ thuộc và tươn tự với B. Tất nhiên, các thư viện của Python cũng được quản lý bằng phiên bản và phụ thuộc vào phiên bản của ngôn ngữ Python. Do đó, trong quá trình tìm hiểu, làm việc, lượng thư viện các bạn cài trở nên nhiều dần theo thời gian, kéo theo đó là các lỗi phát sinh do xung đột (conflict) phiên bản của một số thư viện.

Pipenv la gi

Vậy! để hoàn toàn quản lý được môi trường phát triển, trước hết chúng ta cần hiểu một số khái niệm.

Một số khái niệm

PIP

Python Package Installer – là một công cụ hỗ trợ cài đặt các gói (thư viện, framework) Python (Tương tự với yum, dnf trên một số linux distros của Redhat hay npm, yarn của Node.js …vv)

Nếu bạn sử dụng Python 2 >=2.7.9 hoặc Python 3 >=3.4 thì pip sẽ được mặc định cài chung với Python. Nếu máy của bạn đã có sẵn Python và không được cài sẵn pip, bạn có thể cài đặt bằng cách mở terminal (Command Prompt-cmd trên Windows) và thực hiện các lệnh sau

# tải file cài đặt về và lưu dưới tên get-pip.py curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py # thực thi file cài đặt python get-pip.py

Bạn có thể tra cứu chi tiết hơn cách cài đặt pip tại đây.

Lưu ý: bạn có thể kiểm tra pip đã được cài đặt hay chưa bằng cách đơn giản: Mở terminal và gõ thử một trong 2 lệnh sau, nếu có thông tin phản hồi, nghĩa là pip đã được cài đặt, ngược lại, bạn cần cài đặt pip theo hướng dẫn bên trên

Pipenv la gi

Ngoài pip ra còn có một số công cụ khác hỗ trợ việc cài đặt và quản lý phiên bản các gói trong Python:

  • Anaconda
  • Miniconda
  • Pipenv
  • Poetry

Virtual Environment

Như vấn đề đã nêu ở đầu bài viết, để tránh trường hợp chồng chéo các gói và xung đột phiên bản giữa các thư viện, người ta đã xây dựng ra khái niệm môi trường ảo (Virtual Environment – venv). Trong khái niệm này, người ta sẽ clone toàn bộ môi trường phát triển gốc của ngôn ngữ ra một khu vực riêng và chỉ load môi trường này lên trong một (hoặc một số) dự án cụ thể.

Phương pháp này rất hiệu quả và được cộng đồng phát triển Python khuyến khích sử dụng.

Cũng tương tự như công cụ quản lý phần mềm, để quản lý môi trường ảo, chúng ta có rất nhiều lựa chọn như:

  • venv được tích hợp sẵn trong Python (từ phiên bản 3.3 trở về sau)
  • pyenv-virtualenv
  • conda
  • pipenv

Trong phần này, mình sẽ hướng dẫn các bạn cài đặt môi trường ảo, sử dụng pip để cài đặt một số thư viện, qua đó giới thiệu Jupyter Notebook – một công cụ tuyệt vời, giúp các bạn có thể học Python một cách dễ dàng hơn nữa.

Bước 1: Các bạn cần tạo 1 folder, nơi các bạn sẽ chứa tất cả mã nguồn các bạn thực hiện trong quá trình làm việc. Mở terminal và di chuyển vào trong folder vừa tạo

Pipenv la gi

Bước 2: Khởi tạo môi trường ảo. Để chỉ tiết hơn, mình sẽ cung cấp cho các bạn thông số về phiên bản Python và pip trên máy của mình

➜ py-beginning python3 --version Python 3.7.2 ➜ py-beginning pip3 --version pip 19.0.3 from /Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/site-packages/pip (python 3.7)

Mình sẽ sử dụng gói venv được tích hợp sẵn trong Python để tạo môi trường ảo với cú pháp

# Tạo môi trường ảo từ gói venv được tích hợp sẵn, lưu trong thư mục venv (py-beginning/venv) python3 -m venv venv

Lúc này, trong thư mục py-beginning sẽ được tạo một số thực mục và file như sau:

Pipenv la gi

Bước 3: Kích hoạt môi trường và kiểm tra

Pipenv la gi

Ban đầu, mình sẽ check lại phiên bản của Python, kết quả trả về là 2.7.16 (phiên bản mặc định của hệ điều hành)

Để kích hoạt môi trường ảo vừa tạo, mình sẽ sử dụng cú pháp source venv/bin/activate (ở môi trường Windows bạn cần kích hoạt file venv\Scripts\activate.bat). Sau khi kích hoạt, bạn sẽ thấy môi trường được load lên (venv) ở giao diện terminal.

Kiểm tra lại phiên bản của Python, bạn thấy đã có sự thay đổi.

Lưu ý: Để thoát khỏi môi trường ảo, bạn có thể tắt terminal hiện tại (hoặc Text editor/IDE) đang kích hoạt môi trường. Hoặc sử dụng lệnh (hoặc script đối với Windows) deactivate

Bước 4: Cập nhập pip

pip cũng sẽ được cài đặt theo Python ở môi trường ảo, tuy nhiên, nó thường bị lỗi thời một xíu, do đó chúng ta cần cập nhật nó trước khi sử dụng với câu lệnh: pip install –upgrade pip

Bây giờ, tất cả các thư viện bạn cài đặt sẽ được lưu trong thư mục py-beginning/venv/. Các bạn có thể làm tương tự với các dự án khác nhau, sử dụng các công cụ quản lý để kiểm soát phiên bản của từng gói theo yêu cầu mà không sợ chồng chéo và xung đột.

Jupyter Notebook

Jupyter Notebook là một phần mềm mã nguồn (một ứng dụng web) mở được phát hành bởi Project Jupyter. Nó cho phép bạn viết code trực tiếp, ghi chú (sử dụng markdown), với output rõ ràng rành mạch, kết hợp với các thư viện của Python, bạn sẽ dễ dàng học và tạo được các tài liệu tuyệt vời.

Theo cá nhân mình Jupyter Notebook phù hợp hơn để học tập, nghiên cứu hơn là trong các ứng dụng thực tiễn. Nếu bạn đang bắt đầu tìm hiểu, nghiên cứu về Python, thì không nên bỏ qua nó.

Để cài đặt Jupyter Notebook cũng rất đơn giản. Tiếp tục với hướng dẫn trên. Các bạn chỉ cần cài thêm gói jupyterlab bằng cú pháp

pip install jupyterlab

Ở terminal, các bạn sẽ thấy số lượng các gói phụ thuộc được cài thêm là rất nhiều phải không? đó chính là lý do chúng ta cần đến môi trường ảo.

Sau khi cài xong, để kích hoạt notebook, các bạn sử dụng lệnh

jupyter notebook

Hệ thống sẽ load một số dữ liệu và mở notebook dưới dạng một trang web.

Pipenv la gi

Các bạn sẽ thấy, thư mục của chúng ta đã được ánh xạ lên giao diện web. Giao diện của notebook rất đơn giản và dễ sử dụng. Bạn có thể tạo mới một file mã nguồn

Pipenv la gi

Trong giao diện của file mới được tạo sẽ được chia ra thành các cell (sử dụng menu Insert để thêm mới 1 cell). Các bạn có thể điều chỉnh loại Cell (Markdown hay Code…vv)

Pipenv la gi

Ở đây mình tạo thử 2 cells, cell đầu là mã markdown để ghi chú, cell thứ 2 là code. Sau khi hoàn thành, mình chọn menu Cell -> Run All để thực thi tất cả các cells. Kết quả của mình nhận được sẽ là

Pipenv la gi

Như các bạn thấy, phần mã markdown đã được biên dịch thành văn bản thuần. Phần code đã được thực thi và hiển thị kết quả bên dưới.

Như vậy, qua bài viết này, các bạn đã nắm các khái niệm về môi trường ảo và trình quản lý các gói và phiên bản. Biết cách cài đặt môi trường cho từng dự án tránh gây xung đột. Chúc các bạn cài đặt thành công và để tìm hiểu Python tốt hơn, các bạn đừng quên Jupyter Notebook nhé.