Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Pip config settings not working for virtual environment

Studying https://pip.pypa.io/en/stable/topics/configuration/ I understand that I can have multiple pip.conf files (on a UNIX-based system) which are loaded in the described order.

My task is to write a bash script that automatically creates a virtual environment and sets pip configuration only for the virtual environment.

# my_bash_script.sh
...
python -m virtualenv .myvenv
....
touch pip.conf
# this will create path/to/.myvenv/pip.conf
# otherwise following commands will be in the user's pip.conf at ~/.config/pip/pip.conf

path/to/.myvenv/bin/python -m pip config set global.proxy "my-company-proxy.com"
# setting our company proxy here

path/to/.myvenv/bin/python -m pip config set global.trusted-host "pypi.org pypi.python.org files.pythonhosted.org" 
# because of SSL issues from behind the company's firewall I need this to make pip work
...

My problem is, that I want to set the configuration not for global but for site. If I exchange global.proxy and global.trusted-host for site.proxy and site.trusted-host pip won't be able to install packages anymore whereas everything works fine if I leave it at global. Also changing it to install.proxy and install.trusted-host doesn't work.

The pip.conf file looks like this afterwards:

# /path/to/.myvenv/pip.conf
[global]
proxy = "my-company-proxy.com"
trusted-host = "pypi.org pypi.python.org files.pythonhosted.org"

pip config debug yields the following:

env_var:
env:
global:
  /etc/xdg/pip/pip.conf, exists: False
  /etc/pip.conf, exists: False
site:
  /path/to/.myvenv/pip.conf, exists: True
    global.proxy: my-company-proxy.com
    global.trusted-host: pypi.org pypi.python.org files.pythonhosted.org
user:
  /path/to/myuser/.pip/pip.conf, exists: False
  /path/to/myuser/.config/pip/pip.conf, exists: True

What am I missing here? Thank you in advance for your help!

like image 250
kerfuffle Avatar asked Nov 28 '25 10:11

kerfuffle


1 Answers

The [global] in the config file refers to the fact that these settings are used for all pip commands. See this section of the manual. So you can do something like

[global]
timeout = 60

[freeze]
timeout = 10

The global/site distinction comes from the location of the config file. So your file /path/to/.myvenv/pip.conf is referred to as the site config file through its location. In it, you still need to have

[global]
proxy = "my-company-proxy.com"
trusted-host = "pypi.org pypi.python.org files.pythonhosted.org"
like image 180
FlyingTeller Avatar answered Nov 30 '25 00:11

FlyingTeller



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!