python权限不够无法写入_解决python使用pip安装模块的权限问题
ubuntu16.04下默認的python和pip
1.ubuntu16.04默認安裝了兩個版本的python,python2.7和python3.5,可以使用python -V查看版本
命令行中python是2.7版本,python3是python3.5版本
請注意,系統自帶的python千萬不能卸載!
2.ubuntu默認沒有裝pip,我們一般用sudo apt-get install pip,這樣安裝的是python2的pip,默認安裝的位置是/usr/lib/python2.7/dist-packages/pip,這里的dist代表是debian系統提供的源安裝的,
sudo apt-get install python-pip3,這樣安裝的是系統自帶的python3.5的pip3,默認安裝的位置是/usr/lib/python3.5/dist-packages/pip3
使用apt和pip安裝的python包是在不同的位置
apt安裝的python包在/usr/lib,?pip安裝的python包在/usr/local/lib
當python的Module從Debian軟件包管理器安裝時,它們將安裝到dist-packages中,?由于pip的安裝是從debian的包管理器安裝的,所以通過pip安裝的python的Module也是在dist-packages,不過是存放在/usr/local/lib/python2.7/dist-packages目錄中而不是/usr/lib/python2.7/dist-packages
其實pip也是python的一個package,也是放在/usr/lib/python2.7/dist-packages,這個package可以來管理python的其它package
手動從源代碼安裝的package存放在site-packages目錄中,dist-packages是Debian特定的約定,它的派生版本例如Ubuntu中也存在。
dist-packages和site-packages的區別
python安裝的package的位置又可以細分為兩個位置, 分別是dist-packages和site-packages。從Debian軟件包安裝的第三方Python軟件將放入dist-packages,而不是site-packages。這是為了減少系統Python與您可能手動安裝的Python構建之間的沖突。
如果從源代碼手動安裝Python,它將使用site-packages目錄。這使得可以將兩個python安裝的包分開,因為Debian和Ubuntu在許多系統級別程序中都依賴Python的系統版本。這個其實很少見的,一般的包都是從pip或者apt上安裝的.可以使用--user選項,使的其安裝在site-package處.
怎么樣是python的源碼安裝呢?
幾乎所有第三方模塊都可以在 PyPI 或 github 上找到源碼,都會提供 zip、tar 等格式的壓縮包。把代碼壓縮包下載到本地并解壓,應該會看到一個 setup.py 的文件。在命令行進入其所在目錄,執行:python set_up.py install即為源碼安裝(會自動安裝一些依賴).
對于一些沒有其他依賴,不需要編譯其他語言的純 Python 代碼包,也可以直接手動將源碼復制到 site-packages 或 dist-packages 目錄下。只要路徑正確,就可以在你的代碼里引入這些模塊。
為什么使用pip3安裝package出現權限不足的報錯
首先看看pip3是哪個python的package,pip3 -V
1.如果pip3使用的python是系統自帶的python3.5, 那么pip3試圖將package安裝在/usr目錄下,就會出現權限不足的錯誤. 因為/usr是root用戶的,只有root才能創建和刪除,而python3.5要把package安裝到/usr/local下必須要sudo才能安裝.這個好像是ubuntu16.04之后出現的問題
2.如果pip3使用的不是系統自帶的python3.5而是自己安裝的python3.6但是python3.6也是在/usr下的,那么pip3也會出現將package安裝在/usr目錄下,就會出現權限不足的錯誤
3.如果pip3使用的不是系統自帶的python3.5而是自己安裝的python3.6,并且這個自己安裝的python3.6不是安裝在/usr下而是在$HOME目錄下,則可以直接pip3安裝,這樣安裝的package就在~/.local/lib/python3.6/dist-package下
如何解決1和2無法pip3安裝package問題
有兩種解決方案
提升權限.sudo pip3 install xxx #會有個問題,package都安裝在/usr下,可能其它文件對package讀寫需要sudo權限
安裝在用戶站點(user site)處.?pip?install?--user numpy,package會安裝在$HOME/.local/lib/python3.6/dist-package下
舉例:
如果自己在系統自帶python3.5的情況下又要安裝python3.6和python3.6的numpy,首先要知道自己的python3.6是如何安裝的,如果是debian的庫,即apt安裝的, 那么python將會安裝在/usr/lib(庫文件)和usr/bin(可執行文件)下,那么再為python3.6安裝numpy也必須要有root權限才能呢個在/usr文件夾下執行寫入操作!就得用之前提到的兩種解決方案
如何為python3.6安裝pip3和numpy呢?
首先要知道python3.5和python3.6都是使用pip3
sudo apt-get install python-pip3是給默認版本即python3.5安裝的
如何區分pip3是為哪個版本的python安裝package呢
這個時候使用pip3? install numpy安裝時候,安裝的numpy實際上是使用python3.5安裝的,需要python3.6 -m pip install 來執行,才會給python3.6安裝相應的numpy
不用單獨為python3.6安裝相應的pip3,用一個即可.因為哪怕你換到python3.6,到時候為python3.5安裝的時候也會存在這個問題.
實際上這樣多個python安裝會出問題的,最好使用虛擬環境或者用conda來管理
總結
以上是生活随笔為你收集整理的python权限不够无法写入_解决python使用pip安装模块的权限问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python中isleap_Python
- 下一篇: python矩阵的平方_NumPy之计算