Ubuntu18.0 解決python虛擬環境中不同用戶下或者python多版本環境中指定虛擬環境的使用問題


一. 不同用戶下配置virtualenvwrapper的問題

問題描述: 

安裝virtualnev和virtualnevwrapper之后,在.bashrc進行virtualenvwrapper的相關配置后重新加載.bashrc文件時報錯.

報錯內容大致如下:

/usr/bin/python: No module named virtualenvwrapper
virtualenvwrapper.sh: There was a problem running the initialization hooks.

If Python could not import the module virtualenvwrapper.hook_loader,
check that virtualenvwrapper has been installed for
VIRTUALENVWRAPPER_PYTHON=/usr/bin/python and that PATH is
set properly

也就是說系統檢測當前pip下的安裝軟件中查找不到virtualenv和virtualenvwrapper.

 

 

之所以會出現這樣的問題有可能是以下幾條原因:

  1. 在安裝虛擬環境時, 可能是在使用普通用戶下加了sudo命令進行安裝了virtualenv和virtualenvwrapper.
    使用命令   pip list   進行查看,是否安裝成功, 如果使用了pip3 進行安裝虛擬環境要使用 pip3 list進行查看. 
    如果當前用戶下pip已安裝軟件中沒有看到 virtualenv 和  virtualenvwrapper 基本上就是以上的原因

    解決方法:

    - 如果是普通用戶不要加sudo進行安裝
    pip install  virtualenv 
    pip install  virtualenvwrapper

    安裝之后使用pip list可以查看到已經成功的安裝了兩個軟件, 接下來進行配置即可

    配置.bashrc
    注意!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

    這時要在當前用戶的目錄下修改.bashrc, 意思就是root用戶和普通用戶的~目錄下都存在一個.bashrc配置文件
    使用不同的用戶執行 vim ~/.bashrc 這句命令時 其實是操作了不同的文件
    root 用戶相當於執行了 vim /root/.bashrc
    普通用戶則是 vim /home/allen(普通用戶名)/.bashrc

    root用戶要在/root/.bashrc中進行配置
    普通用戶要在/home/allen(用戶名)/.bashrc 下進行安裝

    在配置文件中添加配置內容
    WORKON_HOME=~/Envs # 設置virtualenv的統一管理目錄, 創建的虛擬環境文件都會放在這里
    VIRTUALENVWRAPPER_VIRTUALENV_ARGS='--no-site-packages' # 添加virtualenvwrapper的參數,生成干凈隔絕的環境
    VIRTUALENVWRAPPER_PYTHON=/opt/python3/bin/python3 # 指定python解釋器的本體(注意此路徑隨不同的linux環境改變而改變)
    解釋器一定要進行配置, 否則會報錯, 要指定pip對應的python解釋器, 可以通過 pip -V 進行查看 pip對應的python解釋器版本

    source /opt/python34/bin/virtualenvwrapper.sh # 執行virtualenvwrapper安裝腳本
    無法確定virtualenvwrapper.sh路徑時可以通過find 進行查找, 查找范圍基本可以確定到 /home/(用戶名)/ 和 /usr/

    find /usr/ -name "virtualenvwrapper.sh" -type f
    find /home/ -name "virtualenvwrapper.sh" -type f

    使用普通用戶安裝的一般都會在/home目錄下, root用戶安裝的會在/usr目錄下

    添加配置信息后重新加載配置文件  source ~/.bashrc

  2. 使用sudo pip list 和 pip list 查看后發現都安裝了virtualenv 和 virtualenvwrapper ,切換root 用戶輸入find / -name "virtualenvwrapper.sh" 命令進行查找 會發現有兩個查找結果.


    這是因為在bashrc配置文件中指定的python解釋器與安裝的virtualenvwrapper的解釋器沒有對應上導致的.

    解決方法:
    重新編輯配置文件內容, 修改配置信息

    可以通過一下的方法來查找虛擬環境和python解釋器的對應關系:

    首先: 查看pip版本, 獲取到pip對應的默認的版本
    pip -V

    可以得到到類似下面的信息 (有一些情況pip會指向python3)
    pip 19.2.3 from /usr/local/lib/python2.7/dist-packages/pip (python 2.7)
    確認pip指定的是python2版本的解釋器, 然后使用which python查看python的解釋器路徑

    然后在配置中配置python解釋器和對應的virtualenvwrapper.sh

    與情況一相同, 要修改自己使用的用戶對應的配置文件.

 

  • 不過當root 和 普通用戶都安裝虛擬環境並進行配置之后,在切換用戶時可能會出現如下報錯:

 

 雖然看起來是又搞砸了, 但是這個問題並不影響使用創建虛擬環境的使用, 個人不建議在root 和 普通用戶下都安裝虛擬環境. 

有強迫症的同學可以自己去研究一下.

二. 存在多個python版本, 使用虛擬環境指定版本時出錯

不同項目中可能會使用到不同的python版本,想要使用虛擬環境指定python版本創建虛擬環境時要注意:

  只需要安裝一次虛擬環境, 在創建虛擬環境時通過指定python解釋器的方式來創建不同python版本的虛擬環境.

 

解決方案和問題一種的基本類似, 最主要的問題還是要讓配置信息中的虛擬環境和python解釋器相對應, 

 

建議安裝其他的python版本時使用編譯安裝, 然后在/usr/bin下創建軟連接, 連接中標明安裝的版本號.

 

 

目前已知使用virtualenvwrapper過程中可能出現的錯誤:

1.zlib錯誤

觸發錯誤的背景:

使用pip3安裝virtualenv 和 virtualenvwrapper , 在指定自己安裝的python2.7.16為python解釋器時報錯,無法引入zlib模塊.

ImportError: No module named zlib

 

解決方案:

使用apt安裝pip

sudo apt install python-pip

如果安裝速度太慢可以更換apt官方源為國內源, 如ali源或者清華源. 
但要注意要使用官方網站中提供的源,不要隨便使用百度中博客中提供的源,有大概率會和你的系統版本不匹配導致更新源失敗,無法下載軟件

安裝成功之后,再次指定python2為解釋器創建虛擬環境, 就可以成功創建.

 ----------------------------------------------------------------------------------------------------------------------------------

如果安裝了pip仍然報如上錯誤, 極大可能是存在多個python版本沖突. 解決版本沖突請移步

 

2.stevedore模塊錯誤

觸發錯誤的背景:

使用python3作為解釋器創建虛擬環境時,提示缺少stevedore模塊

 ModuleNotFoundError: No module named 'stevedore'

 

解決方案:

使用pip3進行安裝該模塊即可

pip3 install stevedore
如果提示已經安裝stevedore模塊可以嘗試卸載后再進行安裝.
要注意:
  如果同時存在pip 和 pip3 要留意,不要卸載錯了

成功安裝stevedore模塊之后,就可以創建虛擬環境

 

 

歡迎指出文章中的錯誤和不足~~~~~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM