Pip 默认行为与 virtualenv 冲突?
Pip default behavior conflicts with virtualenv?
我正在学习本教程http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-world/page/5
当我执行 virtualenv flask
命令时,收到此错误消息:
Can not perform a '--user' install. User site-packages are not visible in this virtualenv.
这是有道理的,因为 virtualenv 的目的是创建一个您可以控制的新环境,而 --user
命令将所有内容都放在特定位置,击败了 objective 开发人员分离环境。
不过似乎 pip 默认为 --user
安装,我可以更改此默认行为吗?而且,更好的是,我可以让 pip 随时与 virtualenv 一起玩吗?
澄清一下,这是我的终端的样子。
MELCHIOR:miguelgrinberg-microblog megablanc$ virtualenv flask
New python executable in flask/bin/python
Installing setuptools, pip, wheel...
Complete output from command /Users/megablanc/Dev...log/flask/bin/python -c "import sys, pip; sys...d\"] + sys.argv[1:]))" setuptools pip wheel:
Can not perform a '--user' install. User site-packages are not visible in this virtualenv.
----------------------------------------
...Installing setuptools, pip, wheel...done.
Traceback (most recent call last):
File "/Users/megablanc/Library/Python/2.7/bin/virtualenv", line 11, in <module>
sys.exit(main())
File "/Users/megablanc/Library/Python/2.7/lib/python/site-packages/virtualenv.py", line 832, in main
symlink=options.symlink)
File "/Users/megablanc/Library/Python/2.7/lib/python/site-packages/virtualenv.py", line 1004, in create_environment
install_wheel(to_install, py_executable, search_dirs)
File "/Users/megablanc/Library/Python/2.7/lib/python/site-packages/virtualenv.py", line 969, in install_wheel
'PIP_NO_INDEX': '1'
File "/Users/megablanc/Library/Python/2.7/lib/python/site-packages/virtualenv.py", line 910, in call_subprocess
% (cmd_desc, proc.returncode))
OSError: Command /Users/megablanc/Dev...log/flask/bin/python -c "import sys, pip; sys...d\"] + sys.argv[1:]))" setuptools pip wheel failed with error code 1
您不需要设置 --user
标志。创建 virtualenv (virtualenv flask
) 后,激活它:source flask/bin/activate
。您的 shell 应该类似于 (flask) ~>
.
一旦你的 virtualenv 被激活,你应该能够毫无问题地 pip 安装包。例如,pip install numpy
。它们将安装在:lib/python2.6/site-packages/
(对于您使用的 Python 的任何版本)
~/.pip.
中有一个 pip.conf 文件,我使用命令 gedit pip.conf
将标志 user=true
更改为 user=false
,之后我可以成功创建虚拟环境。
在我的例子中,我正在为 python disco
mapreduce 库做一个 make test
。
所以我修改了Makefile
测试部分并删除了--user
标志。
在我的例子中,来自 anaconda 的自定义 python 安装干扰了系统安装。检查 which pip
...解决方案是删除或移动 python.
的自定义安装
就我而言,/etc/pip.conf
中有一个文件秘密设置了 user=true
。所以,每次我激活一个 virtualenv,那个配置仍然影响 virtualenv。
删除该行对我有用。
有些人建议您编辑 /etc/pip.conf
,这 (i) 需要超级用户权限,并且 (ii) 如果操作不当可能会破坏您的整个系统。因此,最好仅将其保留给您的用户。
用文本编辑器打开$HOME/.pip/pip.conf
。如果它不存在(在我的 Manjaro 机器中就是这种情况),请创建它。然后添加下面的行,保存并关闭。
[global]
user=false
当您更改程序的设置时,如果可能,最好在 $HOME
下执行此操作,这将 (i) 在更新和重新安装系统期间保留设置(如果您已将磁盘分离到 /
和 /home
分区,当然) 和 (ii) 不会破坏程序的进一步升级,在这种情况下,pip
.
对我有用的是将 $VIRTUAL_ENV_DIRECTORY/pyvenv.cfg
更改为 include-system-site-packages = true
虽然看起来很老套。
当你的 virutalenv myenv 被激活时(来源 myenv/bin/activate),移除 --user
.
这对我有用,我只将 $VIRTUAL_ENV_DIRECTORY/pyvenv.cfg
更改为
include-system-site-packages = true
默认设置
include-system-site-packages = false
注:
> python --version
Python 3.8.3 r c 1
虽然很久以前就有人问过这个问题,但也许另一个答案对某人还是有用的。
如果描述的问题仅在尝试将软件包安装到 在您的主目录 之外的 virtualenv 时发生,则问题可能是您登录的用户帐户没有权限您要安装到的文件夹。
使用chown更改/提高用户对目标虚拟环境所在文件夹的权限,例如:
chown username /var/www/your-webproject-folder/ -r
或
sudo chown username /var/www/your-webproject-folder/ -r
如果你必须用 root 来做。
检查您的 PIP_USER
环境变量是否已设置。
这为我解决了问题。
如果您使用 GitPod then this is a known issue.
我正在学习本教程http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-world/page/5
当我执行 virtualenv flask
命令时,收到此错误消息:
Can not perform a '--user' install. User site-packages are not visible in this virtualenv.
这是有道理的,因为 virtualenv 的目的是创建一个您可以控制的新环境,而 --user
命令将所有内容都放在特定位置,击败了 objective 开发人员分离环境。
不过似乎 pip 默认为 --user
安装,我可以更改此默认行为吗?而且,更好的是,我可以让 pip 随时与 virtualenv 一起玩吗?
澄清一下,这是我的终端的样子。
MELCHIOR:miguelgrinberg-microblog megablanc$ virtualenv flask
New python executable in flask/bin/python
Installing setuptools, pip, wheel...
Complete output from command /Users/megablanc/Dev...log/flask/bin/python -c "import sys, pip; sys...d\"] + sys.argv[1:]))" setuptools pip wheel:
Can not perform a '--user' install. User site-packages are not visible in this virtualenv.
----------------------------------------
...Installing setuptools, pip, wheel...done.
Traceback (most recent call last):
File "/Users/megablanc/Library/Python/2.7/bin/virtualenv", line 11, in <module>
sys.exit(main())
File "/Users/megablanc/Library/Python/2.7/lib/python/site-packages/virtualenv.py", line 832, in main
symlink=options.symlink)
File "/Users/megablanc/Library/Python/2.7/lib/python/site-packages/virtualenv.py", line 1004, in create_environment
install_wheel(to_install, py_executable, search_dirs)
File "/Users/megablanc/Library/Python/2.7/lib/python/site-packages/virtualenv.py", line 969, in install_wheel
'PIP_NO_INDEX': '1'
File "/Users/megablanc/Library/Python/2.7/lib/python/site-packages/virtualenv.py", line 910, in call_subprocess
% (cmd_desc, proc.returncode))
OSError: Command /Users/megablanc/Dev...log/flask/bin/python -c "import sys, pip; sys...d\"] + sys.argv[1:]))" setuptools pip wheel failed with error code 1
您不需要设置 --user
标志。创建 virtualenv (virtualenv flask
) 后,激活它:source flask/bin/activate
。您的 shell 应该类似于 (flask) ~>
.
一旦你的 virtualenv 被激活,你应该能够毫无问题地 pip 安装包。例如,pip install numpy
。它们将安装在:lib/python2.6/site-packages/
(对于您使用的 Python 的任何版本)
~/.pip.
中有一个 pip.conf 文件,我使用命令 gedit pip.conf
将标志 user=true
更改为 user=false
,之后我可以成功创建虚拟环境。
在我的例子中,我正在为 python disco
mapreduce 库做一个 make test
。
所以我修改了Makefile
测试部分并删除了--user
标志。
在我的例子中,来自 anaconda 的自定义 python 安装干扰了系统安装。检查 which pip
...解决方案是删除或移动 python.
就我而言,/etc/pip.conf
中有一个文件秘密设置了 user=true
。所以,每次我激活一个 virtualenv,那个配置仍然影响 virtualenv。
删除该行对我有用。
有些人建议您编辑 /etc/pip.conf
,这 (i) 需要超级用户权限,并且 (ii) 如果操作不当可能会破坏您的整个系统。因此,最好仅将其保留给您的用户。
用文本编辑器打开$HOME/.pip/pip.conf
。如果它不存在(在我的 Manjaro 机器中就是这种情况),请创建它。然后添加下面的行,保存并关闭。
[global]
user=false
当您更改程序的设置时,如果可能,最好在 $HOME
下执行此操作,这将 (i) 在更新和重新安装系统期间保留设置(如果您已将磁盘分离到 /
和 /home
分区,当然) 和 (ii) 不会破坏程序的进一步升级,在这种情况下,pip
.
对我有用的是将 $VIRTUAL_ENV_DIRECTORY/pyvenv.cfg
更改为 include-system-site-packages = true
虽然看起来很老套。
当你的 virutalenv myenv 被激活时(来源 myenv/bin/activate),移除 --user
.
这对我有用,我只将 $VIRTUAL_ENV_DIRECTORY/pyvenv.cfg
更改为
include-system-site-packages = true
默认设置
include-system-site-packages = false
注:
> python --version
Python 3.8.3 r c 1
虽然很久以前就有人问过这个问题,但也许另一个答案对某人还是有用的。
如果描述的问题仅在尝试将软件包安装到 在您的主目录 之外的 virtualenv 时发生,则问题可能是您登录的用户帐户没有权限您要安装到的文件夹。
使用chown更改/提高用户对目标虚拟环境所在文件夹的权限,例如:
chown username /var/www/your-webproject-folder/ -r
或
sudo chown username /var/www/your-webproject-folder/ -r
如果你必须用 root 来做。
检查您的 PIP_USER
环境变量是否已设置。
这为我解决了问题。
如果您使用 GitPod then this is a known issue.