PyCharm+Pipenv虛擬環(huán)境開(kāi)發(fā)和依賴管理的教程詳解
hello,小伙伴們大家好,今天給大家介紹的開(kāi)源項(xiàng)目是Python虛擬環(huán)境管理工具,Pipenv
是Python官方推薦的包管理工具??梢哉f(shuō),它集成了virtualenv
, pip
和pyenv
三者的功能。其目的旨在集合了所有的包管理工具的長(zhǎng)處,如: npm, yarn, composer等的優(yōu)點(diǎn)。
Pipenv試圖解決的問(wèn)題是多方面的:
我們不需要再手動(dòng)創(chuàng)建虛擬環(huán)境,Pipenv
會(huì)自動(dòng)為我們創(chuàng)建,它會(huì)在某個(gè)特定的位置創(chuàng)建一個(gè) virtualenv
環(huán)境,然后調(diào)用 pipenv shell
命令切換到虛擬環(huán)境。使用 requirements.txt
可能會(huì)導(dǎo)致一些問(wèn)題,所以 Pipenv
使用 Pipfile
和 Pipfile.lock
來(lái)替代之,而且 Pipfile
如果不存在的話會(huì)自動(dòng)創(chuàng)建,而且在安裝、升級(jí)、移除依賴包的時(shí)候會(huì)自動(dòng)更新 Pipfile
和 Pipfile.lock
文件。哈希值隨處可見(jiàn)。安全。自動(dòng)公開(kāi)安全漏洞。讓您深入了解依賴關(guān)系圖(例如$ pipenv graph
)。隨時(shí)查看圖形化的依賴關(guān)系。可通過(guò)自動(dòng)加載 .env
讀取環(huán)境變量,簡(jiǎn)化開(kāi)發(fā)流程。
安裝Pipenv
MacOS
$ brew install pipenv
Debian
$ sudo apt install pipenv
Fedora
$ sudo dnf install pipenv
假如你電腦上有多個(gè)Python
版本,你可以指定Python
版本安裝
$ python3 -m pip install pipenv
常用命令
$ pipenv Usage: pipenv [OPTIONS] COMMAND [ARGS]... Options: --where 顯示項(xiàng)目文件所在路徑 --venv 顯示虛擬環(huán)境實(shí)際文件所在路徑 --py 顯示虛擬環(huán)境Python解釋器所在路徑 --envs 顯示虛擬環(huán)境的選項(xiàng)變量 --rm 刪除虛擬環(huán)境 --bare 最小化輸出 --completion 完整輸出 --man 顯示幫助頁(yè)面 --three / --two 使用Python 3/2創(chuàng)建虛擬環(huán)境(注意本機(jī)已安裝的Python版本) --python TEXT 指定某個(gè)Python版本作為虛擬環(huán)境的安裝源 --site-packages 附帶安裝原Python解釋器中的第三方庫(kù) --jumbotron An easter egg, effectively. --version 版本信息 -h, --help 幫助信息
命令參數(shù)
Commands: check 檢查安全漏洞 graph 顯示當(dāng)前依賴關(guān)系圖信息 install 安裝虛擬環(huán)境或者第三方庫(kù) lock 鎖定并生成Pipfile.lock文件 open 在編輯器中查看一個(gè)庫(kù) run 在虛擬環(huán)境中運(yùn)行命令 shell 進(jìn)入虛擬環(huán)境 uninstall 卸載一個(gè)庫(kù) update 卸載當(dāng)前所有的包,并安裝它們的最新版本
基本使用
我們可以創(chuàng)建一個(gè)項(xiàng)目,名稱 PipenvTest,然后新建一個(gè) Python 腳本,例如叫 tst_env.py,內(nèi)容為:
import django print(django.get_version())
結(jié)果如下:
1.12
我們可以看到系統(tǒng)安裝的 Django 版本是 1.12。但是我們想要本項(xiàng)目基于 Django 2.x 開(kāi)發(fā),當(dāng)然我們可以選擇將系統(tǒng)的 Django 版本升級(jí),但這樣又可能會(huì)影響其他的項(xiàng)目的運(yùn)行,所以這并不是一個(gè)好的選擇。為了不影響系統(tǒng)環(huán)境的 Django 版本,所以我們可以用 Pipenv 來(lái)創(chuàng)建一個(gè)虛擬環(huán)境。
在該目錄下,輸入 pipenv 命令即可查看命令的完整用法:
Usage: pipenv [OPTIONS] COMMAND [ARGS]... Options: --update Update Pipenv & pip to latest. --where Output project home information. --venv Output virtualenv information. --py Output Python interpreter information. --envs Output Environment Variable options. --rm Remove the virtualenv. --bare Minimal output. --completion Output completion (to be eval'd). --man Display manpage. --three / --two Use Python 3/2 when creating virtualenv. --python TEXT Specify which version of Python virtualenv should use. --site-packages Enable site-packages for the virtualenv. --jumbotron An easter egg, effectively. --version Show the version and exit. -h, --help Show this message and exit. Usage Examples: Create a new project using Python 3.6, specifically: $ pipenv --python 3.6 Install all dependencies for a project (including dev): $ pipenv install --dev Create a lockfile containing pre-releases: $ pipenv lock --pre Show a graph of your installed dependencies: $ pipenv graph Check your installed dependencies for security vulnerabilities: $ pipenv check Install a local setup.py into your virtual environment/Pipfile: $ pipenv install -e . Commands: check Checks for security vulnerabilities and against PEP 508 markers provided in Pipfile. graph Displays currently–installed dependency graph information. install Installs provided packages and adds them to Pipfile, or (if none is given), installs all packages. lock Generates Pipfile.lock. open View a given module in your editor. run Spawns a command installed into the virtualenv. shell Spawns a shell within the virtualenv. uninstall Un-installs a provided package and removes it from Pipfile. update Uninstalls all packages, and re-installs package(s) in [packages] to latest compatible versions.
創(chuàng)建虛擬環(huán)境
第一步首先驗(yàn)證一下當(dāng)前的項(xiàng)目是沒(méi)有創(chuàng)建虛擬環(huán)境的,調(diào)用如下命令:
$ pipenv --venv
結(jié)果如下
No virtualenv has been created for this project yet!
Aborted!
這說(shuō)明當(dāng)前的項(xiàng)目尚未創(chuàng)建虛擬環(huán)境,接下來(lái)我們利用 Pipenv 來(lái)創(chuàng)建一個(gè)虛擬環(huán)境:
$ pipenv --three
或者
$ pipenv install --python 3.6
創(chuàng)建一個(gè) Python3 的虛擬環(huán)境,–-three 代表創(chuàng)建一個(gè) Python3 版本的虛擬環(huán)境,–-python 則可以指定特定的 Python 版本,當(dāng)然如果指定了 --two 或者 --three 選項(xiàng)參數(shù),則會(huì)使用 python2 或者 python3 的版本安裝,否則將使用默認(rèn)的 python 版本來(lái)安裝。但前提你的系統(tǒng)必須裝有該版本的 Python 才可以。
當(dāng)然也可以指定準(zhǔn)確的版本信息:
$ pipenv install --python 3 $ pipenv install --python 3.6 $ pipenv install --python 2.7.14
pipenv 會(huì)自動(dòng)掃描系統(tǒng)尋找合適的版本信息,如果找不到的話,同時(shí)又安裝了 pyenv 的話,則會(huì)自動(dòng)調(diào)用 pyenv 下載對(duì)應(yīng)版本的 python, 否則會(huì)報(bào)錯(cuò)。
這時(shí)候在當(dāng)前 new_env 環(huán)境下生成 Pipfile 和 Pipfile.lock 兩個(gè)環(huán)境初始化文件。
接下來(lái)我們可以切換到該虛擬環(huán)境下執(zhí)行命令,執(zhí)行如下命令即可:
$ pipenv shell
使用Pipenv來(lái)安裝第三方包
$ pipenv install urllib3
此時(shí),Pipfile 里有最新安裝的包文件的信息,如名稱、版本等。用來(lái)在重新安裝項(xiàng)目依賴或與他人共享項(xiàng)目時(shí),你可以用 Pipfile 來(lái)跟蹤項(xiàng)目依賴。
Pipfile 是用來(lái)替代原來(lái)的 requirements.txt 的,內(nèi)容類似下面這樣。source 部分用來(lái)設(shè)置倉(cāng)庫(kù)地址,packages 部分用來(lái)指定項(xiàng)目依賴的包,dev-packages 部分用來(lái)指定開(kāi)發(fā)環(huán)境需要的包,這樣分開(kāi)便于管理。
$ cat Pipfile [[source]] url = "https://pypi.org/simple" verify_ssl = true name = "pypi" [packages] "urllib3" = "*" [dev-packages] [requires] python_version = "3.6"
Pipfile.lock 則包含你的系統(tǒng)信息,所有已安裝包的依賴包及其版本信息,以及所有安裝包及其依賴包的 Hash 校驗(yàn)信息。
$ Pipfile.lock { "_meta": { "hash": { "sha256": "af58f3510cb613d4d9241128f9a0ceb9bb936ad907543e23ad8317011dcb6715" }, "pipfile-spec": 6, "requires": { "python_version": "3.6" }, "sources": [ { "name": "pypi", "url": "https://pypi.org/simple", "verify_ssl": true } ] }, "default": { "urllib3": { "hashes": [ "sha256:a68ac5e15e76e7e5dd2b8f94007233e01effe3e50e8daddf69acfd81cb686baf", "sha256:b5725a0bd4ba422ab0e66e89e030c806576753ea3ee08554382c14e685d117b5" ], "index": "pypi", "version": "==1.23" } }, "develop": {} }
那么到這里有小伙伴可能就會(huì)問(wèn)了, Pipfile 和 Pipfile.lock 有什么用呢?
Pipfile 其實(shí)一個(gè) TOML 格式的文件,標(biāo)識(shí)了該項(xiàng)目依賴包的基本信息,還區(qū)分了生產(chǎn)環(huán)境和開(kāi)發(fā)環(huán)境的包標(biāo)識(shí),作用上類似 requirements.txt 文件,但是功能更為強(qiáng)大。Pipfile.lock 詳細(xì)標(biāo)識(shí)了該項(xiàng)目的安裝的包的精確版本信息、最新可用版本信息和當(dāng)前庫(kù)文件的 hash 值,顧明思義,它起了版本鎖的作用,可以注意到當(dāng)前 Pipfile.lock 文件中的 Django 版本標(biāo)識(shí)為 ==2.0.2,意思是當(dāng)前我們開(kāi)發(fā)時(shí)使用的就是 2.0.2 版本,它可以起到版本鎖定的功能。
舉個(gè)例子,剛才我們安裝了 Django 2.0.2 的版本,即目前(2018.2.27)的最新版本。但可能 Django 以后還會(huì)有更新,比如某一天 Django 更新到了 2.1 版本,這時(shí)如果我們想要重新部署本項(xiàng)目到另一臺(tái)機(jī)器上,假如此時(shí)不存在 Pipfile.lock 文件,只存在 Pipfile文件,由于 Pipfile 文件中標(biāo)識(shí)的 Django 依賴為 django = “*”,即沒(méi)有版本限制,它會(huì)默認(rèn)安裝最新版本的 Django,即 2.1,但由于 Pipfile.lock 文件的存在,它會(huì)根據(jù) Pipfile.lock 來(lái)安裝,還是會(huì)安裝 Django 2.0.2,這樣就會(huì)避免一些庫(kù)版本更新導(dǎo)致不兼容的問(wèn)題。
Rember:任何情況下都不要手動(dòng)修改 Pipfile.lock
文件!
常用命令
我們可以使用 –-venv 參數(shù)來(lái)獲得虛擬環(huán)境路徑:
$ pipenv --venv /Users/kennethreitz/.local/share/virtualenvs/test-Skyy4vre
項(xiàng)目路徑
$ pipenv --where
/Users/kennethreitz/Library/Mobile Documents/com~apple~CloudDocs/repos/kr/pipenv/test
找到Python解釋器:
$ pipenv --py /Users/kennethreitz/.local/share/virtualenvs/test-Skyy4vre/bin/python
安裝指定軟件包:
$ pipenv install urllib3==1.22
安裝開(kāi)發(fā)環(huán)境下的包:
通常有一些Python包只在你的開(kāi)發(fā)環(huán)境中需要,而不是在生產(chǎn)環(huán)境中,例如單元測(cè)試包。 Pipenv使用--dev標(biāo)志區(qū)分兩個(gè)環(huán)境。
加 --dev 表示包括 Pipfile 的 dev-packages 中的依賴。
$ pipenv install django --dev Installing pytest... ... Adding pytest to Pipfile's [dev-packages]...
django庫(kù)現(xiàn)在將只在開(kāi)發(fā)虛擬環(huán)境中使用。如果你要在你的生產(chǎn)環(huán)境中安裝你的項(xiàng)目:
pipenv install
這不會(huì)安裝django包。
但是,如果有一個(gè)開(kāi)發(fā)人員將你的項(xiàng)目克隆到自己的開(kāi)發(fā)環(huán)境中,他們可以使用--dev標(biāo)志,將django也安裝:
pipenv install --dev
也就是說(shuō)一個(gè)--dev參數(shù),幫你在同一個(gè)虛擬環(huán)境中又區(qū)分出了開(kāi)發(fā)和非開(kāi)發(fā)環(huán)境。
顯示依賴關(guān)系圖:
$ pipenv graph requests==2.18.4 - certifi [required: >=2017.4.17, installed: 2017.7.27.1] - chardet [required: >=3.0.2,<3.1.0, installed: 3.0.4] - idna [required: >=2.5,<2.7, installed: 2.6] - urllib3 [required: <1.23,>=1.21.1, installed: 1.22]
生成一個(gè)鎖文件:
$ pipenv lock Assuring all dependencies from Pipfile are installed... Locking [dev-packages] dependencies... Locking [packages] dependencies... Note: your project now has only default [packages] installed. To install [dev-packages], run: $ pipenv install --dev
卸載第三方包:
$ pipenv uninstall urllib3 或者 $ pipenv uninstall --all
更新安裝包
$ pipenv update urllib3 $ pipenv update # 更新所有安裝包
檢查軟件包的完整性
你是否擔(dān)心已安裝的軟件包有沒(méi)有安全漏洞?沒(méi)關(guān)系,pipenv 可以幫你檢查,運(yùn)行下面的命令:
$ pipenv check Checking PEP 508 requirements… Passed! Checking installed package safety… All good!
產(chǎn)生 Pipfile.lock
有時(shí)候可能 Pipfile.lock 文件不存在或被刪除了,這時(shí)候我們可以使用如下命令生成:
$ pipenv lock
以上便是一些常用的 Pipenv
命令,如果要查看更多用法可以參考其官方文檔:https://docs.pipenv.org/#pipenv-usage。
修改下載源Pipenv
如果你覺(jué)得在使用pipenv install
安裝的過(guò)程中下載比較慢可以指下載源:
[[source]] name = "pypi" url = "https://pypi.tuna.tsinghua.edu.cn/simple/" verify_ssl = true [dev-packages] [packages] requests = "*" paho-mqtt = "*" pymongo = "*" can = "*" crypto = "*" gvent = "*" gevent = "*" [requires] python_version = "3.7"
只需要修改Pipfile即可。
Pip下載源
阿里: http://mirrors.aliyun.com/pypi/simple/
豆瓣: http://pypi.douban.com/simple/
清華: https://pypi.tuna.tsinghua.edu.cn/simple
PyCharm配置Pipenv
添加Python解釋器
選擇Pipenv 虛擬環(huán)境
Base interpreter為本機(jī)系統(tǒng)中的python解釋器路徑
Pipenv executable表示pipenv,命令的環(huán)境變量路徑
在項(xiàng)目下選擇剛剛新建好的Pipenv名稱。
項(xiàng)目地址:https://github.com/pypa/pipenv
總結(jié)
到此這篇關(guān)于PyCharm+Pipenv虛擬環(huán)境開(kāi)發(fā)和依賴管理的文章就介紹到這了,更多相關(guān)PyCharm+Pipenv虛擬環(huán)境作開(kāi)發(fā)和依賴管理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python基于socket函數(shù)實(shí)現(xiàn)端口掃描
這篇文章主要為大家詳細(xì)介紹了python基于socket函數(shù)實(shí)現(xiàn)端口掃描,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-05-05python中hasattr()、getattr()、setattr()函數(shù)的使用
這篇文章主要介紹了python中hasattr()、getattr()、setattr()函數(shù)的使用方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-08-08Python正則表達(dá)式使用經(jīng)典實(shí)例
本文給大家總結(jié)了17種python正則表達(dá)式使用經(jīng)典實(shí)例,非常不錯(cuò)具有參考借鑒價(jià)值,感興趣的朋友一起學(xué)習(xí)吧2016-06-06在pytorch中計(jì)算準(zhǔn)確率,召回率和F1值的操作
這篇文章主要介紹了在pytorch中計(jì)算準(zhǔn)確率,召回率和F1值的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-05-05Pycharm社區(qū)版創(chuàng)建Flask項(xiàng)目的實(shí)現(xiàn)步驟
本文主要介紹了Pycharm社區(qū)版創(chuàng)建Flask項(xiàng)目,包括設(shè)置Python環(huán)境、安裝Flask庫(kù)以及創(chuàng)建基本的項(xiàng)目結(jié)構(gòu),具有一定的參考價(jià)值,感興趣的可以了解一下2024-06-06Python進(jìn)階多線程爬取網(wǎng)頁(yè)項(xiàng)目實(shí)戰(zhàn)
這篇文章主要為大家介紹了Python進(jìn)階,Python多線程爬取網(wǎng)頁(yè)項(xiàng)目實(shí)戰(zhàn)的示例呈現(xiàn)步驟,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-10-10基于Python實(shí)現(xiàn)n-gram文本生成的示例代碼
N-gram是自然語(yǔ)言處理中常用的技術(shù),它可以用于文本生成、語(yǔ)言模型訓(xùn)練等任務(wù),本文主要介紹了如何在Python中實(shí)現(xiàn)n-gram文本生成,需要的可以參考下2024-01-01pytorch之torch_scatter.scatter_max()用法
這篇文章主要介紹了pytorch之torch_scatter.scatter_max()用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09梯度下降法介紹及利用Python實(shí)現(xiàn)的方法示例
梯度下降算法是一個(gè)很基本的算法,在機(jī)器學(xué)習(xí)和優(yōu)化中有著非常重要的作用,下面這篇文章主要給大家介紹了關(guān)于利用Python實(shí)現(xiàn)梯度下降法的相關(guān)資料,對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-07-07