Sử dụng Pyenv để tạo nhiều môi trường ảo với các phiên bản Python khác nhau


Lời nói đầu

Nếu các bạn làm cùng lúc nhiều dự án bằng Python cùng lúc, thì có thể sẽ gặp một vài trường hợp như dự án A dùng Python 3.8, dự án B lại dùng Python 3.6, dự án C lại dùng Python 2.7,… hoặc một dự án bạn cần code và test trên nhiều Python version khác nhau chẳng hạn.

Điều khó khăn ở đây là bạn phải cài đặt nhiều phiên bản Python trên máy tính của mình để code, debug,.. tuy nhiên nó lại dẫn đến trường hợp xung đột giữa các module của các version khác nhau, bạn lại tốn thêm thời gian để giải quyết các xung đột trên.

Và rồi, Python đã tạo ra một module có tên là venv, dùng phiên bản Python sẵn có trong máy của bạn, tạo ra một môi trường ảo, bạn có thể cài các module trong đó mà không ảnh hưởng gì đến các module bên ngoài.

Tuy nhiên, đối với vấn đề đầu tiên, bạn cũng phải cài đặt nhiều phiên bản Python trên máy tính, mà khi tạo một môi trường ảo thì phải tự chọn ra phiên bản mong muốn.

Có cách nào tạo ra môi trường ảo cho từng phiên bản Python mà chỉ cần vài câu lệnh đơn giản hay không?

Pyenv ra đời để làm việc đó.


Giới thiệu về Pyenv

Pyenv là gì?

Pyenv là một công cụ chuyển đổi qua lại các phiên bản Python khác nhau cho tùy mục đích sử dụng.

Nói một cách dễ hiểu hơn, bạn có thể chạy code của mình trên nhiều Python version mà không cần phải tạo nhiều môi trường Python, tất cả đã có Pyenv lo thông qua vài cấu hình và câu lệnh đơn giản.

Cài đặt Pyenv

Hiện tại Pyenv chưa có package cụ thể trên Linux cũng như Ubuntu, nên bạn có thể cài đặt thông qua clone source code của Pyenv. Ở đây mình sẽ lưu repository này ở thư mục ~/.pyenv.

git clone https://github.com/pyenv/pyenv.git ~/.pyenv

Khi đã clone về xong, bạn nên thêm binary của Pyenv vào trong PATH để có thể call pyenv ở mọi nơi. Bạn tạo biến PYENV_ROOT và update biến PATH để mỗi khi login sẽ thêm binary của pyenv vào.

echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile

Thêm pyenv init vào shell của bạn để cấu hình shell environment cho pyenv

echo -e 'if command -v pyenv 1>/dev/null 2>&1; then eval "$(pyenv init -)"; fi' >> ~/.bash_profile

Để có thể sử dụng pyenv command trong shell hiện tại, bạn có thể restart shell:

exec $SHELL

Hoặc source ~/.bash_profile hiện tại:

source ~/.bash_profile

Thử kiểm tra pyenv version nào 😛

pyenv --version

Và có output kiểu kiểu như sau là ổn:

pyenv 1.2.20-19-g8ac91b4f

Kiểm tra thư mục root của pyenv

pyenv root

Kết quả đây rồi:

/home/thachanpy/.pyenv

Cập nhật Pyenv

Vì mình dùng git để cài đặt Pyenv, nên việc cập nhật cũng theo Git luôn:

cd $(pyenv root)
git pull

Hoặc bạn có thể cập nhật theo một tag version đặc biệt nào đó:

cd $(pyenv root)
git fetch
git tag
git checkout v0.1.0

Xóa cài đặt Pyenv

Đầu tiên bạn nên xóa pyenv init command line trong ~/.bash_profile

Sau đó việc đơn giản là xóa thư mục cài đặt của pyenv thôi

rm -rf $(pyenv root)

Cách sử dụng Pyenv

Khi bạn đã cài đặt xong pyenv trong máy tính của bạn, thì bạn cần phải làm gì để sử dụng nó?

Cài đặt pyenv-virtualenv

Trước tiên bạn phải cài đặt một Plugin tên là pyenv-virtualenv. Plugin này sẽ khởi tạo các môi trường Python ảo với phiên bản tương ứng.

Để cài đặt plugin này, bạn cũng sẽ dùng git như pyenv

git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv

Thêm câu lệnh sau vào ~/.bash_profile để tự động kích hoạt môi trường ảo

echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile

Restart lại shell hoặc source ~/.bash_profile để kích hoạt pyenv-virtualenv

exec $SHELL

Hoặc

source ~/.bash_profile

Cài đặt Python versions

Để khởi tạo một môi trường ảo với phiên bản Python bất kỳ, đầu tiên bạn phải cài đặt phiên bản đó vào máy của bạn thông qua pyenv. Ở đây mình sẽ cài đặt Python 3.7.5

 pyenv install 3.7.5

Khi cài xong, bạn có thể kiểm tra lại thông qua lệnh sau:

pyenv versions

Bạn có thể thấy đã có version 3.7.5 trong pyenv.

* system (set by /home/thachanpy/.pyenv/version)
  3.7.5

Nếu mình cài Python 2 trên Pyenv được không nhỉ? Mình thử tạo thêm 2.7.17 xem sao nhé.

pyenv install 2.7.17

Và cũng đã có rồi:

* system (set by /home/thachanpy/.pyenv/version)
  2.7.17
  3.7.5

Khởi tạo môi trường ảo

Khi đã có được một vài phiên bản Python, bạn có thể tạo môi trường ảo thông qua các version trên.

Cú pháp đơn giản như sau:

pyenv virtualenv <version> <name>

Ví dụ mình sẽ tạo một môi trường ảo với Python version là 3.7.5 ở thư mục venv-3.7.5

pyenv virtualenv 3.7.5 venv-3.7.5

Kiểm tra lại các môi trường ảo hiện có:

pyenv virtualenvs
  3.7.5/envs/venv-3.7.5 (created from /home/thachanpy/.pyenv/versions/3.7.5)
  venv-3.7.5 (created from /home/thachanpy/.pyenv/versions/3.7.5)

Một môi trường ảo có tên venv-3.7.5 đã được tạo ra dựa trên Pyenv version 3.7.5 rồi.

Kích hoạt môi trường ảo

Khi đã khởi tạo môi trường ảo xong, để sử dụng thì bạn cần phải kích hoạt nó.

Cú pháp:

pyenv activate <name>

Mình sẽ thử kích hoạt version 3.7.5 xem sao nhé.

pyenv activate venv-3.7.5

Khi đó, shell hiện tại của bạn sẽ vào môi trường ảo, bạn thử kiểm tra lại Python version có đúng như mong muốn hay không.

python --version
Python 3.7.5

Chuẩn và đẹp rồi.

Chuyển đổi sang môi trường ảo khác

Đầu tiên mình tạo một môi trường ảo có tên là venv-2.7.17 với Python version là 2.7.17.

pyenv virtualenv 2.7.17 venv-2.7.17

Kiểm tra đã khởi tạo được môi trường ảo trên hay chưa:

  2.7.17/envs/venv-2.7.17 (created from /home/thachanpy/.pyenv/versions/2.7.17)
  3.7.5/envs/venv-3.7.5 (created from /home/thachanpy/.pyenv/versions/3.7.5)
  venv-2.7.17 (created from /home/thachanpy/.pyenv/versions/2.7.17)
  venv-3.7.5 (created from /home/thachanpy/.pyenv/versions/3.7.5)

Để chuyển đổi qua môi trưởng ảo trên, đơn giản là mình tiếp tục sử dụng param activate thôi.

pyenv activate venv-2.7.17

Và Python version của mình đã là 2.7.17 rồi

Python 2.7.17

Tắt kích hoạt môi trường ảo

Để tắt kích hoạt môi trường ảo đang kích hoạt, bạn dùng câu lệnh sau:

pyenv deactivate

Shell của bạn sẽ thoát ra khỏi môi trưởng ảo hiện tại

Xóa một môi trường ảo

Để xóa một môi trường ảo hiện có, bạn dùng câu lệnh theo cú pháp sau:

pyenv unistall <name>

Xóa thử Pyenv 2.7.17 nhé (nhớ gõ yes để thực thi)

pyenv uninstall venv-2.7.17

Kiểm tra lại các môi trường ảo hiện có:

  3.7.5/envs/venv-3.7.5 (created from /home/thachanpy/.pyenv/versions/3.7.5)
  venv-3.7.5 (created from /home/thachanpy/.pyenv/versions/3.7.5)

Vậy là đã xóa thành công rồi.


Tổng kết

Với vài thao tác đơn giản, bạn có thể chuyển đổi giữa các Python version với nhau thông qua Pyenv.

Điều này giúp cho các bạn có thể test và code các dự án của mình trên cùng một máy tính mà không cần quan tâm đến việc nhiều version Python khác nhau.

Nếu có gì thắc mắc và góp ý cho mình, thì comment lại giúp mình ở page này nhé.

Xin cảm ơn các bạn


0 0 vote
Article Rating
guest
0 Comments
Inline Feedbacks
View all comments