之前看到 Pycon 2018 的一場議程,改變了我目前使用 Python 建立環境的習慣。
然後最近發現大家都還是在用 pip 還有 virtualenv,希望能這次的機會順便推廣一下好用的套件管理工具XD
不過這一篇不會着墨 pipenv 的用法,主要是如何優雅的編譯安裝 python 以及安裝 pipenv ,pipenv 的相關用法之後有機會會再寫一篇介紹。
Python直譯器
管理你開發環境會用到的東西 e.g. virtualenv,fabric
跟開發環境有關的東西 e.g. django,flask
自己寫的程式
只要知道最少量地資訊就能自動安裝所有需要的底層套件
有些底層套件升級之後卻有bug,這時就沒辦法明確指定想要降級的版本
明確指定所有定義(套件名稱、版本),可以明確的知道自己的開發環境長什麼樣子
缺點是所有套件都要自己安裝,數量一多就很麻煩,如果某版本有安全性漏洞,必須要自己到官網尋找最新版本並把版本號碼寫入 requirements.txt 才能升級
軟體的建置是否只要看到定義就能完成
只要在Pipfile
寫好少量的抽象依賴(我要安裝什麼套件),就能自動在 Pipfile.lock
產生實體依賴(版本、建立時間...),因此有版本發生問題時就可以在Pipfile.lock
手動更改部分套件的版本。
我現在要一個 virtual env 管理我的所有套件,但是我要一個工具管理我的 virtual env,這個工具要怎麽裝?
所有virtualenv的東西都是正常的執行檔,所以不需要activate就可以用絕對路徑值
利用執行檔的特性,不用activate即可使用絕對路徑值
避免要先裝pipenv或是先用virtualenv 裝 pipenv 的問題
確定有以下兩個資料夾
~/.local/bin
: 之後會放到自己的 path 裏面,再symlink~/.local/venvs
:底下放所有的虛擬環境在 ~/.local/venvs
底下建立名爲 pipenv 的虛擬環境(virtualenv)
在~/.local/venvs/pipenv/bin/
底下不activate執行 pip3 install pipenv
(此時pipenv就會在local 環境且避免了要先裝pipenv還是先用venv再裝pipenv的問題)
記得使用 pip3 (for python3) 而不是 pip (for python2)
mkdir -p ~/.local/bin ~/.local/venvs
python3 -m venv ~/.local/venvs/pipenv
~/.local/venvs/pipenv/bin/pip3 install pipenv
ln -s ~/.local/venvs/pipenv/bin/pipenv ~/.local/bin
pipenv --version
大推pyenv 的 python-build
python-build 3.6.5 ~/.local/pythons/3.6
python-build 3.5.4 ~/.local/pythons/3.5
ln -s ~/.local/pythons/3.6/bin/python3.6 ~/.local/bin (效果:執行python3.6時可以使用自己編譯的版本)
ln -s ~/.local/pythons/3.5/bin/python3.5 ~/.local/bin
#把~/.local/bin放到path的最前面,這樣使用的python3.5將會是自己build的版本
ln -s ~/.local/bin/python3.6 ~/.local/bin/python3
把python3.6 symlink 到 python3,打python3就會得到python3.6)
compile 3.7.4
WARNING: The Python bz2 extension was not compiled. Missing the bzip2 lib?
WARNING: The Python readline extension was not compiled. Missing the GNU readline lib?
WARNING: The Python sqlite3 extension was not compiled. Missing the SQLite3 lib?
Installed Python-3.7.4 to /home/cjchengtw/.local/pythons/3.7
Donwload python3 development environment
sudo apt install libsqlite3-dev
https://datagrok.org/python/activate/
https://prassanna.io/blog/pyenv-and-pipenv-for-the-perfect-python-environment/