I wonder that today was the first day I stumbled over PEP668 / pipx and
the "externally-managed-environment" problem. I migrated from Debian 11
I'm developing some Python packages; applications and libraries. I never
used virtual environments and wouldn't like to start with it.
But I do use "--editable" for my packages. I wonder how I should go on
with using "pipx" and "--editable" mode because I had some problems with
it I couldn't fix following PEP668 but only with using
"--break-system-packages". And PEP668 do not mention editable-mode.
The two example packages I use here are public available and clonable
(is this a word?) via git.
Let's start with a command line application named "hyperorg"
I tried to install it via "pipx install -e .[develop]". It's
pyproject.toml has a bug: A missing dependency "dateutil". But
"dateutil" is not available from PyPi for Python 3.11 (the default in
Debian 12). But thanks to great Debian they have a "python3-dateutil"
package. I installed it.
But "hyperorg" do ignore it and can't import it. Of course I
re-installed hyperorg via pipx.
Installing it via "pip" and "--break-system-packages" it works well and
do see the "python3-dateutil" package.
The second example is a "library" named "buhtzology"
Here it seems that "pipx" do refuse to install it in the first place
("pipx install -e .[develop]") and gave me this message.
"No apps associated with package buhtzology. Try again with
'--include-deps' to include apps of dependent packages, which are listed
above. If you are attempting to install a library, pipx should not be
used. Consider using pip or a similar tool instead."
What is the difference between an "app" (it is a google/apple marketing
term used for software with user interaction. Just name it application.)
and a "library" in context of pip(x)? Why does it count?
I tried again with "pipx install --include-deps -e .[develop]" and got
an output I'm not sure if this is an error or a success message. I
assume it is an error because I'm not able to "import buhtzology". It
seems like that the package was not installed.
⚠️ Note: normalizer was already on your PATH at /usr/bin/normalizer
⚠️ Note: f2py was already on your PATH at /usr/bin/f2py
⚠️ Note: f2py3 was already on your PATH at /usr/bin/f2py3
⚠️ Note: f2py3.11 was already on your PATH at /usr/bin/f2py3.11
⚠️ Note: py.test was already on your PATH at /usr/bin/py.test
⚠️ Note: pytest was already on your PATH at /usr/bin/pytest
⚠️ File exists at /home/user/.local/bin/pycodestyle and points to
/home/user/.local/pipx/venvs/buhtzology/bin/pycodestyle. Not modifying.
⚠️ File exists at /home/user/.local/bin/ruff and points to
/home/user/.local/pipx/venvs/buhtzology/bin/ruff. Not modifying.
installed package buhtzology 0.2.0.dev0, installed using Python 3.11.2
These apps are now globally available
- pycodestyle (symlink missing or pointing to unexpected location)
- ruff (symlink missing or pointing to unexpected location)
done! ✨ 🌟 ✨
$ python3 -c "import buhtzology"
Traceback (most recent call last):
File "<string>", line 1, in <module>
ModuleNotFoundError: No module named 'buhtzology'