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