program story

virtualenv 대신 글로벌 사이트 패키지에 pip 설치

inputbox 2020. 9. 25. 07:51
반응형

virtualenv 대신 글로벌 사이트 패키지에 pip 설치


사용 pip3A가에 패키지를 설치하는 virtualenv글로벌 사이트 패키지로 설치 될 패키지를 일으키는 대신 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

에서 $PATH변수를 변경 했습니다 .bash_profile. 다음 줄을 추가했습니다.

export PATH=/usr/local/bin:$PATH

which python3리턴 실행 /usr/local/bin/python3(셸을 다시 시작한 후)

참고 : which python3여전히 반환 usr/bin/python됩니다.

다음을 virtualenv사용하여 설치 pip3:

pip3 install virtualenv

다음으로 새로 virtualenv만들고 활성화합니다.

virtualenv testpy3 -p python3
cd testpy3
source bin/activate

참고 : -p python3을 지정하지 않으면 virtualenv의 bin 폴더에서 pip가 누락됩니다.

실행 which pipwhich pip3VIRTUALENV 폴더를 모두 반환 :

/Users/kristof/VirtualEnvs/testpy3/bin/pip3

이제 활성화 된 virtualenv에서 pip를 사용하여 Markdown을 설치하려고하면 pip가 virtualenv의 site-packages 폴더 대신 global site-packages 폴더에 설치됩니다.

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/

보시다시피 global site-packages 폴더에는 Markdown이 포함되어 있지만 virtualenv 폴더에는 포함되어 있지 않습니다.

참고 : 이전에 다른 VM에 Python2 및 Python3을 설치했으며 ( 지침에 따름) Python3에서 동일한 문제가 발생했습니다. Python2 기반 virtualenv에 패키지를 설치하면 완벽하게 작동했습니다.

모든 팁, 힌트,… 대단히 감사하겠습니다.


재밌게 당신이 이것을 제기했는데, 나는 똑같은 문제가있었습니다. 결국 해결했지만 원인이 무엇인지는 확실하지 않습니다.

bin/pipbin/activate스크립트를 확인하십시오 . 에서 bin/pip의 오두막에서보기. 맞습니까? 그렇지 않은 경우 수정하십시오. 그런 다음 ~ 라인 42에서에서 bin/activatevirtualenv 경로가 올바른지 확인하십시오. 다음과 같이 보일 것입니다.

VIRTUAL_ENV="/Users/me/path/to/virtual/environment"

잘못의 경우를 해결 deactivate하고 . bin/activate우리의 상호 문제 같은 원인이 있고, 경우에, 그것을 작동합니다. 그래도 그렇지 않다면 어쨌든 올바른 길을 가고있는 것입니다. 나는 당신이했던 것과 같은 문제 해결 루틴을 which pip반복하고 스택 추적을 따르는 등의 과정을 거쳤다 .

절대적으로

/Users/kristof/VirtualEnvs/testpy3/bin/pip3

비슷한 이름의 다른 테스트 프로젝트를 언급하지 않고 원하는 것입니다 (그 문제가 있었는데 어떻게 시작되었는지 모르겠습니다. 내 의심은 동시에 여러 virtualenv를 실행하고 있습니다).

이 중 어느 것도 작동하지 않으면 Joe Holloway가 말했듯이 일시적인 해결책이 될 수 있습니다.

전체 경로로 virtualenv의 pip를 실행하기 만하면 (즉, 실행 경로 검색에 의존하지 않음) 환경을 활성화 할 필요조차 없습니다. 그것은 옳은 일을 할 것입니다.

아마도 이상적이지는 않겠지 만, 약간 씩 작동해야합니다.

내 원래 질문에 대한 링크 :

VirtualEnv / Pip이 전역 적으로 패키지를 설치하려고합니다.


나에게 이것은 pip 또는 virtualenv 문제가 아닙니다. 파이썬 문제였습니다. 온라인 튜토리얼을 따라 한 후 ~ / .bash_profile (또는 ~ / .bashrc)에서 내 $ PYTHONPATH를 수동으로 설정했습니다. 이 수동 설정 $ PYTHONPATH는 아마도 허용되어야하므로 virtualenv에서 사용할 수 있습니다.

또한 add2virtualenvvirtualenv 내에서 어떤 이유로 내 $ 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

이제 모든 것이 매력처럼 작동합니다.


나도이 문제가 있었다. 호출 pip install <package_name>로부터 /bin파이썬 2.7 글로벌 사이트 패키지 디렉토리에 설치하는 파이썬 패키지 내 매버릭스 Mac에서 내 파이썬 3.3 가상 환경 내에서 디렉토리 일으켰습니다. 이것은 내 $ PATH가 pip. 기묘한. CentOS에서는 발생하지 않습니다. 나를 위해,이 솔루션은 호출 된 pip3대신 pip. 내가 설치 한 경우 핍을 통해 가상 환경 내에서 ez_setup 세 "PIP"실행 파일이 설치되었던 /bin디렉토리 - pip, pip3하고 pip3.3. 흥미롭게도 세 파일은 모두 똑 같았습니다. 부름pip3 install <package_name>Python 패키지가 로컬 사이트 패키지 디렉토리에 올바르게 설치되도록했습니다. pip가상 환경에 대한 전체 경로 이름으로 호출 하는 것도 올바르게 작동했습니다. 내 Mac이 예상대로 $ PATH를 사용하지 않는 이유를 알고 싶습니다.


virtualenv 내에서 python 패키지를 설치하는 동안 동일한 문제가 발생했습니다. 제 경우에는 근본 원인이 달랐습니다. virtualenv 내에서 나는 (Ubuntu에서는 습관이 아님) 다음을 수행했습니다.

sudo easy_install -Z <package>

이로 인해 bin / pip shebang이 무시되고 루트의 비 virtualenv 파이썬을 사용하여 전역 사이트 패키지에 설치했습니다. 가상 환경이 있으므로 "sudo"없이 패키지를 설치해야합니다.


가장 먼저 확인해야 할 것은 pip가 어떤 위치를 확인하는지입니다.

which pip

virtualenv에 있다면 다음과 같은 결과를 기대할 수 있습니다.

/path/to/virtualenv/.name_of_virtualenv/bin/pip

그러나 어떤 이유로 든 시스템 핍으로 해결되는 경우 일 수 있습니다. 예를 들어 virtualenv 내에서 이것을 볼 수 있습니다 (이것은 나쁩니다) :

/ usr / local / bin / pip (또는 virtualenv 경로에없는 모든 것).

이 문제를 해결하려면 다음에서 pipconfig를 확인하십시오.

~/.pipconf
~/.conf/pip
/etc/pip.conf

그리고 Python 경로 또는 pip 경로를 강제하는 것이 없는지 확인하십시오 (이것은 나를 위해 수정했습니다).

그런 다음 새 터미널을 시작하고 virtualenv를 다시 빌드하십시오 (삭제 한 후 다시 작성하십시오).


I stumbled upon the same problem running Manjaro. I created the virtual environment using python3 -m ven venv and then activated using source venv/bin/actiave. which python and which pip both pointed towards the correct binaries in the virtualenv, however I was not able to install to the virtualenv, even when using the full path of the binaries. Turned out that when I uninstalled the python-pip package with sudo pacman -R python-pip python-reportlab (had to include reportlab to satisfy dependencies) everything started to work as expected. Not sure why, but this is probably due to a double install where the system package is taking precedence.


I had a similar problem after updating to pip==8.0.0. Had to resort to debugging pip to trace out the bad path.

내 프로필 디렉토리에 빈 경로 값이있는 distutils 구성 파일이있는 것으로 밝혀졌습니다. 이로 인해 모든 패키지가 적절한 가상 환경 (제 경우에는 /lib/site-packages) 대신 동일한 루트 디렉토리에 설치되었습니다 .

구성 파일이 어떻게 거기에 있는지 또는 빈 값이 있는지 확실하지 않지만 pip를 업데이트 한 후 시작되었습니다.

다른 사람이 동일한 문제를 발견하는 경우 ~/.pydistutils.cfgpip가 기본 분산 구성으로 돌아 갔기 때문에 파일을 삭제 (또는 빈 구성 경로 제거)하면 내 환경에서 문제가 해결되었습니다.


오늘 같은 문제가 발생했습니다. sudo easy_install pip(OSX / Max)를 사용 하여 전역 적으로 pip를 다시 설치 한 다음 sudo virtualenv nameOfVEnv. 그런 다음 새 virtualenv를 활성화 한 후 pip명령이 예상대로 작동했습니다.

I don't think I used sudo on the first virtualenv creation and that may have been the reason for not having access to pip from within the virtualenv, I was able to get access to pip2 before this fix though which was odd.


Here are some practices that could avoid headaches when using Virtual Environments:

  • Create a folder for your projects.
  • Create your Virtualenv projects inside of this folder.
  • After activating the environment of your project, never use "sudo pip install package".
  • After finishing your work, always "deactivate" your environment.
  • Avoid renaming your project folder.


For a better representation of this practices, here is a simulation:


creating a folder for your projects/environments

$ mkdir venv

creating environment

$ cd venv/ 

$ virtualenv google_drive
New python executable in google_drive/bin/python
Installing setuptools, pip...done.

activating environment

$ source google_drive/bin/activate

installing packages

(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...

package available inside the environment

(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()
>>>

deactivate environment

(google_drive) $ deactivate 

$ 

package NOT AVAILABLE outside the environment

(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
>>> 

Notes:

Why not sudo?

Virtualenv creates a whole new environment for you, defining $PATH and some other variables and settings. When you use sudo pip install package, you are running Virtualenv as root, escaping the whole environment which was created, and then, installing the package on global site-packages, and not inside the project folder where you have a Virtual Environment, although you have activated the environment.

If you rename the folder of your project (as mentioned in the accepted answer)...

...you'll have to adjust some variables from some files inside the bin directory of your project.

For example:

bin/pip, line 1 (She Bang)

bin/activate, line 42 (VIRTUAL_ENV)


I had this problem. It turned out there was a space in one of my folder names that caused the problem. I removed the space, deleted and reinstantiated using venv, and all was well.


This problem occurs when create a virtualenv instance and then change the parent folder name.


None of the above solutions worked for me.

My venv was active. pip -V and which pip gave me the correct virtualenv path, but when I pip install-ed packages with activated venv, my pip freeze stayed empty.

All the environment variables were correct too.

Finally, I just changed pip and removed virtualenv:

easy_install pip==7.0.2

pip install pip==10

sudo pip uninstall virtualenv

Reinstall venv:

sudo pip install virtualenv

Create venv:

python -m virtualenv venv_name_here

And all packages installed correctly into my venv again.


Go to bin directory in your virtual environment and write like this:

./pip3 install <package-name>

After creating virtual environment, try to use pip located in yourVirtualEnvName\Scripts

It should install a package inside Lib\site-packages in your virtual environment


I had this problem too. Calling sudo pip install caused Python packages to be installed in the global site-packages diretory and calling pip install just worked fine. So no use sudo in virtualenv.


The same problem. Python3.5 and pip 8.0.2 installed from Linux rpm's.

I did not find a primary cause and cannot give a proper answer. It looks like there are multiple possible causes.

However, I hope I can help with sharing my observation and a workaround.

  1. pyvenv with --system-site-packages

    • ./bin does not contain pip, pip is available from system site packages
    • packages are installed globally (BUG?)
  2. pyvenv without --system-site-packages

    • pip gets installed into ./bin, but it's a different version (from ensurepip)
    • packages are installed within the virtual environment (OK)

Obvious workaround for pyvenv with --system-site-packages:

  • create it without the --system-site-packages option
  • change include-system-site-packages = false to true in pyvenv.cfg file

It's also worth checking that you didn't modify somehow the path to your virtualenv.

In that case the first line in bin/pip (and the rest of the executables) would have an incorrect path.

You can either edit these files and fix the path or remove and install again the virtualenv.


For Python 3ers

Try updating. I had this exact same problem and tried Chases' answer, however no success. The quickest way to refactor this is to update your Python Minor / Patch version if possible. I noticed that I was running 3.5.1 and updated to 3.5.2. Pyvenv once again works.


This happened to me when I created the virtualenv in the wrong location. I then thought I could move the dir to another location without it mattering. It mattered.

mkdir ~/projects
virtualenv myenv
cd myenv
git clone [my repository]

Oh crap, I forgot to cd into projects before creating the virtualenv and cloning the rep. Oh well, I'm too lazy to destroy and recreate. I'll just move the dir with no issues.

cd ~
mv myenv projects
cd projects/myenv/myrepo
pip install -r requirements

Nope, wants more permissions, what the? I thought it was strange but SUDO AWAY! It then installed the packages into a global location.

The lesson I learned was, just delete the virtualenv dir. Don't move it.


Had this issue after installing Divio: it had changed my PATH or environment in some way, as it launches a terminal.

The solution in this case was just to do source ~/.bash_profile which should already be setup to get you back to your original pyenv/pyenv-virtualenv state.


It happened to me when I installed virtualenv with --python=python3.6 flag but afterwards tried to use pip2 install.
Creating virtualenv with flag of the version that you'll use solves permission problems. To check, try which pip or which pip2 or which pip3 (depends on your choice). If any pip you use shows path not to venv here is your problem.


Somehow a setup.cfg file with a prefix="" in the project folder

running pip install on the virtualenv outside the project folder worked so from the inside it was telling pip to use an empty prefix which defaults to "/"

removing the file fixed it


I had this problem, and after trying all the above solution I just removed everything and started afresh.

In my own case i used sudo in creating one of the folders in which the virtual environment existed, and sudo give the priviledges to root

I was very pissed! But it worked!


I have to use 'sudo' for installing packages through pip on my ubuntu system for some reason. This is causing the packages to be installed in global site-packages. Putting this here for anyone who might face this issue in future.


I had exactly the problem from the title, and I solved it. Pip started to install in the venv site-packages after I cleaned my PATH: it had a path to my local ~/bin directory at the very beginning.

So, my advice: thoroughly check your environment variables for "garbage" or any non-standard things. Unfortunately, virtualenv can be sensitive to those.

Good luck!


Lot of good discussion above, but virtualenv examples were used. Since 'conda' is now the recommended tool to manage virtualenv, I have summarized the steps in running pip in conda env as follow.

I'll use py36r as the name of the env, and /opt/conda/envs is the prefix to the 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

Note that the pip executed should be in /opt/conda/envs/py36r/bin/pip (not /opt/conda/bin/pip).

Alternatively, you can simply run the following without conda activate

$ /opt/conda/envs/py36r/bin/pip

Also, if you install using conda, you can install without activate:

$ conda install -n py36r pkg_abc ...

참고URL : https://stackoverflow.com/questions/20952797/pip-installing-in-global-site-packages-instead-of-virtualenv

반응형