我无法让 pip 在公司防火墙后面工作。我将 http 和 https 代理添加到我的/etc/environment
文件中,如果我执行echo "$HTTP_PROXY"
它,它会打印正确的内容。但是,如果我执行env
或,则printenv
不会显示任何代理变量。我认为这pip
也是失败的原因。任何见解都将不胜感激。我的/etc/environment
文件看起来像
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
http_proxy="http://<stuff>.<stuff>.org:80"
HTTP_PROXY="http://<stuff>.<stuff>.org:80"
https_proxy="https://<stuff>.<stuff>.org:443"
HTTPS_PROXY="https://<stuff>.<stuff>.org:443"
我也将同样的行添加到我的~/.bashrc
文件中。
答案1
WSL 在启动 shell(无论是否登录)时不使用 PAM 堆栈,因此基于 PAM 的操作会失败:
/etc/environment
并且~/.pam_environment
,阅读pam_env
,不适用(WSL #1405)pam_umask
未设置默认 umask (WSL #352)- 限制来自
pam_limits
(WSL #1576)
具体来说,对于环境设置,最简单的方法可能是将它们添加到.profile
(如果运行登录 shell)或.bashrc
,使用export
。
总的来说,似乎没有简单的解决方案。
您可以以您的用户身份再次登录:
sudo -iu "$USER"
su - "$USER"
/etc/pam.d/sudo
这些应该分别在或中加载 PAM 配置/etc/pam.d/su
。但它们彼此略有不同,也与/etc/pam.d/sshd
或不同/etc/pam.d/lightdm
,因此并非所有内容都与您通过 GUI 或 SSH 登录实际 Ubuntu 系统时相同。
(和sudo
都会su
要求输入密码,但都可以配置为不要求输入密码。)
答案2
您遇到的问题是由于“bash 没有获取 /etc/environment”在 WSL 中。我偶然发现了这个问题,它很讨厌。更讨厌的是,这是一个 7 年前的问题,截至撰写本文时,仍未解决。我将从这个问题中复制我的解决方法,供任何人参考:
庆祝