Nick,

thanks for your thorough answer.

On Mon, 2017-02-06 at 20:07 +0100, Nick Coghlan wrote:
> 
> It's not specific to Fedora's Python 3 packaging as such, but it *is*
> specific to:
> 
> - using --system-site-packages
> - having pip install in the system site packages

Yes, understood.

> However, the way Fedora handles the native venv support in Python 3
> means that this case will *always* apply when creating Python 3
> virtual environments that can see the virtual environments - the pip
> that gets installed into the virtual environment comes from
> python-pip, rather than being a bundled copy in the Python RPM.

I'm still a bit puzzled by this part.

If I understand stdlib's venv documentation correctly [1], when one
creates a virtual environment, it will use ensurepip to bootstrap pip
into the virtual environment.

However, if pip is installed in system site packages, then ensurepip
will skip the bootstrapping process, leaving the created virtual
environment without its bundled copy of pip:

$ python3 -m venv --system-site-packages myvenv3
$ source myvenv3/bin/activate
(myvenv3) $ python3 -m ensurepip 
Ignoring indexes: https://pypi.python.org/simple
Requirement already satisfied (use --upgrade to upgrade): setuptools in
/usr/lib/python3.5/site-packages
Requirement already satisfied (use --upgrade to upgrade): pip in
/usr/lib/python3.5/site-packages
(myvenv3) [vagrant@tadej-zbook ~]$ ls myvenv3/bin
activate  activate.csh  activate.fish  python  python3

Do you think this is OK or should stdlib's venv module (or ensurepip)
be changed to always create a bundled copy of pip in the virtual
environment?

One big issue with not having pip in virtual environment's bin/ is that
users will probably use 'pip install foo' inside the activated virtual
environment and be surprised by not being able to install anything.
Many of them might not know the 'python -m pip install foo' variant.

> That means you have to pass "--ignore-installed" to get pip to
> actually install into the virtual environment properly:
> 
>     (venv2) $ which pip
>     /usr/bin/pip
>     (venv2) $ python -m pip install --ignore-installed pip
>     Collecting pip
>      Using cached pip-9.0.1-py2.py3-none-any.whl
>     Installing collected packages: pip
>     (venv2) $ which pip
>     /tmp/venv2/bin/pip


Well, it is not always necessary :). If there would be a newer pip
available on PyPI than the installed system site packages version, one
could also get away with:
(myvenv3) $ python3 -m pip install -U pip
Collecting pip
  Using cached pip-9.0.1-py2.py3-none-any.whl
Installing collected packages: pip
  Found existing installation: pip 8.1.2
    Not uninstalling pip at /usr/lib/python3.5/site-packages, outside
environment /home/vagrant/myvenv3
Successfully installed pip-9.0.1
(myvenv3) $ ls myvenv3/bin
activate  activate.csh  activate.fish  pip  pip3  pip3.5  python  pytho
n3

> I think that makes sense at least as a BZ against the Fedora Python 3
> package (to pass --ignore-installed when installing components into
> the venv), and it may even make sense to file it as a bug against
> CPython upstream as well, since it will happen any time you have the
> three way combination of:
> 
> - system wide installation of pip
> - using native stdlib venv creation
> - the created venv is configured to have access to the system site
> packages

Agreed, I'll file appropriate bug reports, but first I would like to
make the issues clearer in my head :).

As I see it, there are two issues when one has the aforementioned three
way combination:

1) Users will probably use 'pip install foo' inside the activated
virtual environment and be surprised by not being able to install
anything.
Many of them might not know the 'python -m pip install foo' variant.

2) Users that know the 'python -m pip install' variant may want to
install a package inside the virtual environment that is already
available in system site-packages . The installation won't work unless
they pass the '--ignore-installed' option or they install a newer
version of the same package with '--upgrade' option.

Does this make sense?

Thanks,
Tadej

[1] https://docs.python.org/3/library/venv.html
_______________________________________________
python-devel mailing list -- python-devel@lists.fedoraproject.org
To unsubscribe send an email to python-devel-le...@lists.fedoraproject.org

Reply via email to