[英]pip installing in usr/lib/python3.6/site-packages instead of virtualenv on ubuntu server
[英]pip installing in global site-packages instead of virtualenv
使用pip3
在 virtualenv 中安裝virtualenv
會導致 package 安裝在全局站點包文件夾中,而不是 virtualenv 文件夾中的那個。 以下是我在 OS X Mavericks (10.9.1) 上設置 Python3 和 virtualenv 的方法:
我使用 Homebrew 安裝了 Python3:
ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"
brew install python3 --with-brewed-openssl
更改了.bash_profile
中的$PATH
變量; 添加了以下行:
export PATH=/usr/local/bin:$PATH
運行which python3
返回/usr/local/bin/python3
(在重新啟動 shell 之后)。
注意: which python3
仍然返回 / usr/bin/python
。
使用pip3
安裝virtualenv
:
pip3 install virtualenv
接下來,創建一個新的virtualenv
並激活它:
virtualenv testpy3 -p python3
cd testpy3
source bin/activate
注意:如果我不指定 -p python3,則 virtualenv 中的 bin 文件夾中將缺少 pip。
運行which pip
和which pip3
都返回 virtualenv 文件夾:
/Users/kristof/VirtualEnvs/testpy3/bin/pip3
現在,當我嘗試在激活的 virtualenv 中使用 pip 安裝例如 Markdown 時,pip 將安裝在全局站點包文件夾中,而不是 virtualenv 的站點包文件夾中。
pip install markdown
運行pip list
返回:
Markdown (2.3.1)
pip (1.4.1)
setuptools (2.0.1)
virtualenv (1.11)
/Users/kristof/VirtualEnvs/testpy3/lib/python3.3/site-packages
的內容:
__pycache__/
_markerlib/
easy_install.py
pip/
pip-1.5.dist-info/
pkg_resources.py
setuptools/
setuptools-2.0.2.dist-info/
/usr/local/lib/python3.3/site-packages
的內容:
Markdown-2.3.1-py3.3.egg-info/
__pycache__/
easy-install.pth
markdown/
pip-1.4.1-py3.3.egg/
setuptools-2.0.1-py3.3.egg
setuptools.pth
virtualenv-1.11-py3.3.egg-info/
virtualenv.py
virtualenv_support/
如您所見,全局站點包文件夾包含 Markdown,而 virtualenv 文件夾沒有。
注意:我之前在不同的 VM 上安裝了 Python2 和 Python3(遵循這些說明)並且 Python3 也有同樣的問題; 不過,在基於 Python2 的 virtualenv 中安裝包可以完美運行。
任何提示、提示……將不勝感激。
有趣的是你提出了這個問題,我剛剛遇到了完全相同的問題。 我最終解決了它,但我仍然不確定是什么原因造成的。
嘗試檢查您的bin/pip
和bin/activate
腳本。 在bin/pip
,查看shebang。 正確嗎? 如果不是,請更正。 然后在bin/activate
~ 42
行,檢查您的 virtualenv 路徑是否正確。 它看起來像這樣
VIRTUAL_ENV="/Users/me/path/to/virtual/environment"
如果錯了,更正它, deactivate
,然后. bin/activate
. bin/activate
,如果我們共同的問題有相同的原因,它應該可以工作。 如果它仍然沒有,無論如何你都在正確的軌道上。 我經歷了同樣的問題去解決日常像你一樣, which pip
荷蘭國際集團遍地,以下堆棧跟蹤等。
絕對確保
/Users/kristof/VirtualEnvs/testpy3/bin/pip3
是你想要的,而不是指另一個同名的測試項目(我有這個問題,不知道它是如何開始的。我懷疑是同時運行多個 virtualenvs)。
如果這些都不起作用,那么臨時解決方案可能是,正如喬·霍洛威所說,
只需使用完整路徑運行 virtualenv 的 pip(即不要依賴於搜索可執行路徑),您甚至不需要激活環境。 它會做正確的事情。
也許不理想,但它應該在緊要關頭工作。
鏈接到我的原始問題:
對我來說,這不是 pip 或 virtualenv 問題。 這是一個python問題。 在學習了一些在線教程后,我在 ~/.bash_profile(或 ~/.bashrc)中手動設置了我的 $PYTHONPATH。 這個手動設置的 $PYTHONPATH 在 virtualenv 中可用,因為它可能應該被允許。
此外,出於某種原因, add2virtualenv
沒有將我的項目路徑添加到我的 $PYTHONPATH 中。
對於那些可能仍然被卡住的人來說,只是一些分叉路徑! 干杯!
我遇到了同樣的問題,我通過刪除 venv 目錄並重新創建它來解決它!
deactivate (if venv is activated first deactivate it)
rm -rf venv
virtualenv -p python3 venv
. ENV/bin/activate
pip3 install -r requirements.txt
現在一切都像一個魅力。
我在安裝了 python 2 和 3 的 macos 上遇到了同樣的問題。
另外,我有別名指向.bash_profile
python3 和 pip3 。
alias python=/usr/local/bin/python3
alias pip=/usr/local/bin/pip3
使用python3 -m venv venv
刪除別名並重新創建虛擬python3 -m venv venv
解決了該問題。
首先要檢查的是 pip 解析到的位置:
which pip
如果你在一個 virtualenv 中,你會期望這會給你類似的東西:
/path/to/virtualenv/.name_of_virtualenv/bin/pip
但是,由於某種原因,它可能會解析到您的系統 pip。 例如,您可能會在您的 virtualenv 中看到這一點(這很糟糕):
/usr/local/bin/pip (或任何不在您的 virtualenv 路徑中的東西)。
要解決此問題,請檢查您的 pipconfig:
~/.pipconf
~/.conf/pip
/etc/pip.conf
並確保沒有任何東西強制您的 Python 路徑或 pip 路徑(這為我修復了它)。
然后嘗試啟動一個新終端並重建您的 virtualenv(刪除然后再次創建它)
我也有這個問題。 從我的 Mavericks Mac 上的 Python 3.3 虛擬環境中的/bin
目錄調用pip install <package_name>
導致 Python 包安裝在 Python 2.7 全局站點包目錄中。 盡管事實上我的 $PATH 以包含pip
的目錄開頭。 奇怪。 這不會發生在 CentOS 上。 對我來說,解決方案是調用pip3
而不是pip
。 當我通過ez_setup在虛擬環境中安裝pip 時,三個“pip”可執行文件已經安裝在/bin
目錄中 - pip
、 pip3
和pip3.3
。 奇怪的是,這三個文件完全一樣。 調用pip3 install <package_name>
導致 Python 包被正確安裝到本地 site-packages 目錄中。 使用完整路徑名調用pip
進入虛擬環境也可以正常工作。 我很想知道為什么我的 Mac 沒有像我期望的那樣使用 $PATH 。
我在從 virtualenv 中安裝 python 包時遇到了同樣的問題。 在我的案例中,根本原因是不同的。 在 virtualenv 中,我(出於對 Ubuntu 的習慣)執行以下操作:
sudo easy_install -Z <package>
這導致 bin/pip shebang 被忽略,並使用 root 的非 virtualenv python 將其安裝在全局站點包中。 由於我們有一個虛擬環境,我們應該安裝沒有“sudo”的包
轉到虛擬環境中的 bin 目錄並像這樣編寫:
./pip3 install <package-name>
我在運行 Manjaro 時偶然發現了同樣的問題。 我使用python3 -m ven venv
創建了虛擬環境,然后使用source venv/bin/actiave
。 which python
和which pip
都指向 virtualenv 中正確的二進制文件,但是我無法安裝到 virtualenv,即使使用二進制文件的完整路徑。 原來,當我用sudo pacman -R python-pip python-reportlab
(必須包含 reportlab 以滿足依賴項)卸載 python-pip 包時,一切都開始按預期工作。 不知道為什么,但這可能是由於系統包優先的雙重安裝。
更新到pip==8.0.0
后我遇到了類似的問題。 不得不求助於調試 pip 來找出錯誤的路徑。
事實證明,我的配置文件目錄有一個帶有一些空路徑值的 distutils 配置文件。 這導致所有包都安裝到同一個根目錄而不是適當的虛擬環境(在我的例子中是/lib/site-packages
)。
我不確定配置文件是如何到達那里的,或者它是如何有空值的,但它是在更新 pip 后啟動的。
如果其他人遇到同樣的問題,只需刪除文件~/.pydistutils.cfg
(或刪除空配置路徑)即可解決我環境中的問題,因為 pip 返回到默認的分布式配置。
今天遇到了同樣的問題。 我只是使用sudo easy_install pip
(OSX/Max) 重新安裝了全局sudo easy_install pip
,然后使用sudo virtualenv nameOfVEnv
再次創建了我的 virtualenv。 然后在激活新的 virtualenv 后, pip
命令按預期工作。
我不認為我在第一次創建 virtualenv 時使用了sudo
,這可能是無法從 virtualenv 中訪問pip
的原因,我能夠在此修復之前訪問pip2
,盡管這很奇怪。
以下是一些可以在使用虛擬環境時避免頭痛的做法:
為了更好地表示這種做法,這里是一個模擬:
$ mkdir venv
$ cd venv/
$ virtualenv google_drive
New python executable in google_drive/bin/python
Installing setuptools, pip...done.
$ source google_drive/bin/activate
(google_drive) $ pip install PyDrive
Downloading/unpacking PyDrive
Downloading PyDrive-1.3.1-py2-none-any.whl
...
...
...
Successfully installed PyDrive PyYAML google-api-python-client oauth2client six uritemplate httplib2 pyasn1 rsa pyasn1-modules
Cleaning up...
(google_drive) $ python
Python 2.7.6 (default, Oct 26 2016, 20:30:19)
[GCC 4.8.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> import pydrive.auth
>>>
>>> gdrive = pydrive.auth.GoogleAuth()
>>>
(google_drive) $ deactivate
$
(google_drive) $ python
Python 2.7.6 (default, Oct 26 2016, 20:32:10)
[GCC 4.8.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> import pydrive.auth
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named pydrive.auth
>>>
Virtualenv 為您創建了一個全新的環境,定義了 $PATH 和一些其他變量和設置。 當您使用sudo pip install package 時,您以root身份運行 Virtualenv,轉義創建的整個環境,然后在全局站點包上安裝包,而不是在您擁有虛擬環境的項目文件夾中,盡管您已經激活了環境。
...您必須從項目的bin目錄中的某些文件中調整一些變量。
例如:
bin/pip, line 1 (She Bang)
bin/activate,第 42 行(VIRTUAL_ENV)
我有這個問題。 事實證明,我的一個文件夾名稱中有一個空格導致了問題。 我刪除了空間,使用 venv 刪除並重新實例化,一切都很好。
創建 virtualenv 實例然后更改父文件夾名稱時會出現此問題。
以上解決方案都不適合我。
我的 venv 很活躍。 pip -V
和which pip
給了我正確的 virtualenv 路徑,但是當我使用激活的 venv pip install
-ed 包時,我的pip freeze
保持為空。
所有的環境變量也是正確的。
最后,我只是更改了 pip 並刪除了 virtualenv:
easy_install pip==7.0.2
pip install pip==10
sudo pip uninstall virtualenv
重新安裝 venv:
sudo pip install virtualenv
創建 venv:
python -m virtualenv venv_name_here
並且所有軟件包再次正確安裝到我的 venv 中。
創建虛擬環境后,嘗試使用位於yourVirtualEnvName\\Scripts 中的pip
它應該在您的虛擬環境中的Lib\\site-packages中安裝一個包
我在 Windows 上遇到了類似的問題。 這是由於在 virtualenv 文件夾名稱內重命名我的項目中的文件夾結構引起的。 文件中的路徑沒有改變,但在創建虛擬環境時保持原樣。 正如 Chase Ries 提到的,我已經將文件中的路徑更改為 VIRTUAL_ENV 和 python.exe
set "VIRTUAL_ENV=path_to_venv\\venv"
11 行$env:VIRTUAL_ENV="path_to_venv\\venv"
文件中的 30 行#!d:\\path_to_env\\venv\\scripts\\python.exe
這行在文件的末尾,在我的例子中移動到 667 行的右側,我正在處理光盤d 所以在路徑的開頭是它的字母#!d:\\path_to_env\\venv\\scripts\\python.exe
這行在文件的末尾,在我的例子中移到了右邊的 667 行#!d:\\path_to_env\\venv\\scripts\\python.exe
這行在文件的末尾,在我的例子中移到了右邊的 667 行我也有這個問題。 調用sudo pip install
導致 Python 包安裝在全局站點包目錄中,調用pip install
工作正常。 所以不要在 virtualenv 中使用sudo 。
同樣的問題。 從 Linux rpm
安裝的 Python3.5 和 pip 8.0.2。
我沒有找到主要原因,無法給出正確答案。 看起來有多種可能的原因。
但是,我希望我可以幫助分享我的觀察和解決方法。
pyvenv
與--system-site-packages
./bin
不包含pip
, pip
可從系統站點包中獲得 pyvenv
沒有--system-site-packages
pip
被安裝到./bin
,但它是一個不同的版本(來自ensurepip
) pyvenv
明顯解決方法--system-site-packages
:
--system-site-packages
選項的情況下創建它pyvenv.cfg
文件中的include-system-site-packages = false
更改為true
還值得檢查您是否沒有以某種方式修改 virtualenv 的路徑。
在這種情況下, bin/pip
的第一行(以及其余的可執行文件)將具有不正確的路徑。
您可以編輯這些文件並修復路徑,也可以刪除並重新安裝 virtualenv。
對於 Python 3ers
嘗試更新。 我遇到了完全相同的問題並嘗試了 Chases 的回答,但沒有成功。 重構它的最快方法是盡可能更新您的 Python Minor / Patch 版本。 我注意到我正在運行 3.5.1 並更新到 3.5.2。 Pyvenv 再次起作用。
當我在錯誤的位置創建 virtualenv 時,這發生在我身上。 然后我想我可以將目錄移動到另一個位置而不重要。 這很重要。
mkdir ~/projects
virtualenv myenv
cd myenv
git clone [my repository]
哦,廢話,在創建 virtualenv 和克隆代表之前,我忘了 cd 進入projects
。 哦,好吧,我懶得破壞和重建。 我會毫無問題地移動目錄。
cd ~
mv myenv projects
cd projects/myenv/myrepo
pip install -r requirements
不,想要更多權限,什么? 我覺得這很奇怪,但 SUDO AWAY! 然后將軟件包安裝到全局位置。
我學到的教訓是,只需刪除 virtualenv 目錄。 不要動它。
安裝 Divio 后出現此問題:它在啟動終端時以某種方式更改了我的 PATH 或環境。
在這種情況下,解決方案只是執行source ~/.bash_profile
,它應該已經設置好讓你回到原來的 pyenv/pyenv-virtualenv 狀態。
不知何故,項目文件夾中帶有前綴 =“”的 setup.cfg 文件
在項目文件夾外的 virtualenv 上運行 pip install 工作,因此從內部告訴 pip 使用默認為“/”的空前綴
刪除文件修復它
當我使用--python=python3.6
標志安裝virtualenv時,這發生在我身上,但后來嘗試使用pip2 install
。
使用將要使用的版本標記創建virtualenv可以解決權限問題。 要檢查,請嘗試使用which pip
或which pip2
或which pip3
(取決於您的選擇)。 如果有任何pip
您使用顯示的路徑不venv
這里是你的問題。
我遇到了這個問題,在嘗試了上述所有解決方案后,我只是刪除了所有內容並重新開始。
在我自己的情況下,我使用sudo
創建虛擬環境存在的文件夾之一,並且 sudo 將特權授予 root
我非常生氣! 但它奏效了!
出於某種原因,我必須使用“sudo”在我的 ubuntu 系統上通過 pip 安裝軟件包。 這導致軟件包安裝在全局站點軟件包中。 將此放在此處,供將來可能會遇到此問題的任何人使用。
我正是標題中的問題,我解決了它。 在我清理完 PATH 后,Pip 開始安裝在 venv 站點包中:它一開始就有一個到我本地 ~/bin 目錄的路徑。
所以,我的建議是:徹底檢查你的環境變量是否有“垃圾”或任何非標准的東西。 不幸的是,virtualenv 可能對這些很敏感。
祝你好運!
上面有很多很好的討論,但使用了 virtualenv 示例。 由於'conda'現在是管理virtualenv的推薦工具,我總結了在conda env中運行pip的步驟如下。
我將使用 py36r 作為 env 的名稱,/opt/conda/envs 是 envs 的前綴):
$ source /opt/conda/etc/profile.d/conda.sh # skip if already done
$ conda activate py36r
$ pip install pkg_xyz
$ pip list | grep pkg_xyz
請注意,執行的 pip 應該在/opt/conda/envs/py36r/bin/pip
(不是/opt/conda/bin/pip
)中。
或者,您可以簡單地運行以下命令而無需 conda activate
$ /opt/conda/envs/py36r/bin/pip
此外,如果您使用 conda 安裝,則無需激活即可安裝:
$ conda install -n py36r pkg_abc ...
簡短的回答是使用參數“—no-site-packages”運行命令 virtualenv。
帶解釋的長答案:-
所以在這里和那里跑來跑去,經歷了很多線程之后,我發現我自己是問題所在。 以上答案已經給出了想法,但我想再次討論所有內容。
問題是即使您正在激活環境,它也指的是系統環境,因為我們創建 virtualenv 的方式。
當我們運行命令virtualenv env -p python3 時,它會安裝 virtualenv,但不會創建 no-global—site-packages.txt。
因此,當您通過 source activate 命令激活環境時,該文件名為 site.py(名稱可能不同,我只是忘記了),它會運行並檢查此文件是否不存在,它不會將您的 env 路徑添加到 sys.path並使用系統python。
要解決此問題,只需運行帶有額外參數的 virtualenv —no-site-packages 它將創建該文件,當您激活環境時,它將在您的 PATH 變量中添加您的自定義環境路徑,使其可訪問。
視窗
對我來說,解決方案不是使用mkvirtualenv
,而是:
python -m venv path/to/your/virtualenv
workon 工作正常。
在 virtualenv 中: pip -V
顯示 virtualenv 的 pip 路徑
我也遇到了這個問題,困擾了我很久,后來按照@Chase Ries的方法解決了。
解決問題的關鍵是:
嘗試檢查您的
bin/pip
和bin/activate
腳本。 在bin/pip
中,查看 shebang。 這是正確的嗎? 如果不是,請更正。 然后在你的bin/activate
中的 ~42
行,檢查你的 virtualenv 路徑是否正確。 它看起來像這樣VIRTUAL_ENV="/Users/me/path/to/virtual/environment"
如果錯了,更正它,
deactivate
,然后. bin/activate
. bin/activate
,如果我們的共同問題有相同的原因,它應該有效。
下面,我將在Ubuntu
環境下詳細說明這個過程, Windows
和MacOS
也是如此。
這句話的意思是我們要檢查虛擬環境下bin/pip
文件的第一行#!/path/python
是否正確。
正如我的文件中最初顯示的那樣:
#./home/banni/dai/.venv/bin/python3
在終端運行pip
(絕對路徑):
/home/banni/dai/.venv/bin/pip
會發現錯誤:
bash: ./pip: /home/banni/dai/.venv/bin/python3: bad interpreter: No such file or directory
現在我很困惑為什么我找不到這個python3
,因為python3
存在於虛擬環境所在的文件夾.venv/bin
中。
我檢查了文件夾.venv/bin
的絕對路徑。 執行pwd
命令后,顯示:
/home/banni/Research/dai/.venv/bin
仔細觀察.venv
文件夾的路徑發生了變化。 將/bin/pip
文件的第一行更改為
#./home/banni/Research/dai/.venv/bin/python3
同理檢查並修改bin/activate
文件。
我將VIRTUAL_ENV="/home/banni/dai/.venv"
更改為VIRTUAL_ENV="/home/banni/Research/dai/.venv"
此時,激活虛擬環境后,可以正常執行pip
命令。
所以,對我來說,這個問題的原因是虛擬環境所在文件夾的路徑發生了變化(之前整理文件夾時留下的秘密問題)。
但是由於虛擬環境所在的文件夾位置發生了變化,可能會出現很多路徑錯誤,所以最簡單的方法就是將虛擬環境所在的文件夾恢復到原來的位置。
where pip
找出 pip 位置,如果在基礎環境中,可能沒有安裝 'pip'康達安裝 pip
享受!
我檢查了這里的所有答案,但沒有一個對我有用。 特別檢查了 Chase Ries 的答案,目錄在 pip.exe 和 activate.bat(對於 Windows)中是正確的
我通過將位於 C:\Users\oguno\AppData\Roaming\pip 的 pip.ini(對於 Windows,我認為它是其他操作系統的其他東西)復制到 C:\Users\oguno\Desktop\iec61850 解決了這個問題\myenv3 我的 venv 所在的位置並將目標更改為 C:\Users\oguno\Desktop\iec61850\myenv3\Lib\site-packages 這顯示了我的虛擬環境中的站點包。
對於那些檢查了 python 和 pip 有正確的 virtualenv 路徑的人,另一個可能的問題在於 pip 配置
就我而言,我在配置文件中添加了 --prefix 以在不同路徑中安裝包。 這被 virtualenv 881334444827288 拾取,導致安裝在與全局 pip 相同的位置。
我遇到了這個問題,並通過刪除目錄中導致 venv 路徑的空格來修復它。
我有同樣的問題。 Pip 僅全局安裝。 這意味着pip的配置有問題。
首先,找到 pip 配置文件:
python -m pip config debug
它將列出所有 pip 配置文件。 如果有“假”(沒有文件),創建它(或添加行尊重 - virtualenv = true):
[global]
default-timeout = 60
respect-virtualenv = true
download-cache = /tmp
log-file = /tmp/pip-log.txt
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.