用 pipenv 管理 requirements 搭配 docker-compose local 開發

  • Local 開發是跑在 Docker 的虛擬環境裡,所以 Pipenv 產生的虛擬環境只是用來裝套件產生 Pipfile.lock 而已
  • 用 pipenv 就不用自己寫 requirements.txt,不但可以自動安裝最新版的套件,而且可以很輕鬆的固定住對應 sub-packages 的版本
  • 想一次更新所有套件也很容易
  • 步驟:(以裝一個 package 為例)
    1. pip install --user pipenv
      • 裝完後 command line 找不到 pipenv 的需把對應資料夾加入 PATH
    2. cd 到專案資料夾
    3. pipenv install {target-package}
      • 假如原本沒有 virtual environment,pipenv 會先幫你產生一個基於這個資料夾的 virtual environment
        • 假如上層資料夾有 Pipfile,pipenv 會直接用那個 Pipfile 的 virtual environment,不會產生新的
          • 這是因為 pipenv 的虛擬環境是 project base 的,所以你可以在一個 Django project 裡的任何一個資料夾執行 pipenv 都可以用到這個 project 的虛擬環境
          • 而且正常情況下不會有 Django project 裡還有 Django project 的情況,所以不需要在上層已有 Pipfile 的情況下,又在目前資料夾產生 Pipfile
      • 這邊不要指定版號,pipenv 就會安裝最新版
      • pipenv 會產生 Pipfile 和 Pipfile.lock, 後者有記錄這個 package 和 sub-packages 的固定版號
    4. pipenv lock -r > requirements.txt
      • 將 Pipfile.lock 輸出為 requirements.txt 格式
    5. 接著就可以在 Dockerfile 裡直接用這個 requirements.txt 啦
  • 如果要開新的 Django project:
    1. cd {你想要 project 資料夾放的位置}
    2. mkdir {project-name}; cd {project-name}
    3. pipenv install Django
    4. pipenv run django-admin startproject {project-name} .
      • .: 要把 manage.py 放在當前資料夾
  • 之後假如要把 requirements.txt 裡所有的 top-level 套件都更新的話:
    1. pipenv update
      • 這個我自己沒試過,不過看文件應該是用這指令
    2. 重新輸出 requirements.txt
  • 有看到另一種做法是可以不用自己產生 requirements.txt,直接在 Dockerfile 裡用 pipenv 動態生成 requirements.txt 來用,不過我自己還沒試過

評論

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×