Tạo môi trường Python với Conda

Gần đây, mình bắt đầu sử dụng ngôn ngữ Python cho các dự án của mình. Lý do là Python đã phổ biến và ngày càng phổ biến hơn trong cộng đồng những người làm Machine Learning, NLP và là một trong những ngôn ngữ được dùng nhiều nhất trong ngày khoa học dữ liệu. Có quá nhiều các thư viện Python cho Machine Learning, NLP như scikit-learn, nltk, và đặc biệt là các thư viện Deep Learning như Theano, Chainer. Ngoài ra có rất nhiều các mã nguồn mở sử dụng ngôn ngữ Python. Nói không quá lời, ngôn ngữ Python trong cộng đồng những người làm Machine Learning, NLP cũng giống như tiếng Anh trong giao tiếp quốc tế.

Có một vấn đề khi sử dụng Python đó là các thư viện do người khác phát triển có thể sử dụng các phiên bản Python hoặc các thư viện phụ thuộc khác nhau nên có thể gặp vấn đề khi chia sẻ.

Bài viết tóm tắt lại cách tạo môi trường Python cho các dự án sử dụng Conda và Anaconda dựa trên bài blog: My Python Environment Workflow with Conda. Hiểu một cách đơn giản, Conda là một hệ thống quản lý các thư viện mã nguồn mở và môi trường làm việc, giúp chúng ta dễ dàng cài đặt các phiên bản của các thư viện khác nhau và chuyển đổi qua lại giữa chúng. Trước khi bắt đầu, hãy cài đặt Anaconda trên máy tính của bạn.

Sau đây là các bước tạo môi trường Python sử dụng Conda.

  1. Tạo thư mục của dự án, ví dụ ~/projects/python_env_example trên máy tính của bạn, sau đó chuyển vào thư mục vào tạo:
    $ mkdir ~/projects/python_env_example
    $ cd ~/projects/python_env_example
  2. Tạo một file có tên environment.yml trong thư mục hiện tại. Tên của môi trường có tên trùng với tên của thư mục làm việc. Ví dụ file environment.yml của tôi có nội dung đơn giản như sau:
    name: python_env_example
    dependencies:
    - pip
    - python=3.5
    - anaconda
    

    Trong môi trường Python của mình, tôi sử dụng Python phiên bản 3.5 và các thư viện phụ thuộc là pip và anaconda. Bạn cũng có thể tạo file môi trường bằng lệnh export như sau.

    $ conda env export > environment.yml

    Khi bạn sử dụng thư viện phụ thuộc nào trong dự án của bạn, hãy nhớ bổ sung vào file environment.yml. 

  3. Tạo môi trường conda với lệnh sau:
    $ conda env create -f environment.yml
  4. Bắt đầu sử dụng môi trường làm việc mới python_env_example bằng lệnh:
    $ source activate python_env_example

    Bạn có thể kiểm tra xem các môi trường Python đang có trên hệ thống của bạn bằng lệnh $ conda info –envs

  5. Tạo một file .env với có chứa dòng sau đây:
    source activate python_env_example

    (python_env_example là tên của môi trường Python)
    Mục đích của file này là để tự động hoá việc khởi động môi trường Python bạn đã tạo ra mỗi khi bạn chuyển vào thư mục đã tạo. Trước đó bạn cần cài đặt autoenv. Bạn có thể bỏ qua bước này và mỗi lần muốn chuyển sang môi trường Python đã tạo thì gõ lại lệnh trên. Chú ý trở lại môi trường Python gốc sau khi kết thúc phiên làm việc sử dụng lệnh sau:

    $ source deactivate
  6. Tạo Gitt repository và commit các file đã tạo ra:
    $ git init && git add environment.yml 
    $ git commit -m 'initial commit'
  7. Nếu bạn muốn đẩy repository đã tạo ra lên Github, tạo một repository trên Github và dùng lệnh sau:
    git push -u origin master

    Có thể sử dụng hub để đơn giản hoá quá trình này.

Khi bạn sử dụng thư viện phụ thuộc nào trong dự án của bạn, hãy nhớ bổ sung vào file environment.yml.

Sau khi tạo file môi trường Python environment.yml, bạn có thể dễ dàng chia sẻ với những người khác cùng làm việc trong cùng dự án với mình. Các bước để một người mới có thể bắt đầu làm việc trong dự án của bạn: (1) Sao chép (clone) repository của bạn, (2) Dùng lệnh $ conda env create -f environment.yml để sao chép môi trường Python; (3) Bắt đầu sử dụng môi trường Python với $ source activate python_env_example.

Ghi chú 1:

Bạn có thể thêm hàm sau đây vào file ~/.bashrc để gọi hàm sinh ra file lưu môi trường python trong thư mục làm việc.

## Conda-Env function
function conda-env-file {
     # Create conda environment.yml file and autoenv activation file
     # based on directory name.
     autoenvfilename='.env'
     condaenvfilename='environment.yml'
     foldername=$(basename $PWD)
     if [ ! -f $condaenvfilename ]; then
          printf "name: $foldername\ndependencies:\n- pip\n- python\n- anaconda\" > $condaenvfilename
          echo "$condaenvfilename created."
     else
          echo "$condaenvfilename already exists."
     fi
     if [ ! -f $autoenvfilename ]; then
         printf "source activate $foldername\n" > $autoenvfilename
         echo "$autoenvfilename created."
     else
         echo "$autoenvfilename already exists."
     fi
}

P/S: Trong các dự án của mình, tôi thích dùng conda để quản lý môi trường Python hơn. Bạn cũng có thể sử dụng virtualenv với pip để quản lý môi trường trong trường hợp người khác chia sẻ các “Requirement files” dùng pip. Xem thêm các tài liệu dưới đây:

  1. A non-magical introduction to Pip and Virtualenv for Python beginners
  2. Virtual Environments
Advertisements

One Response

  1. […] Xem thêm thiết lập môi trường Python với conda tại đây […]

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: