On 6/5/20 1:43 PM, Miro Hrončok wrote:
On 05. 06. 20 11:51, Tomas Orsava wrote:
>>>> ## PyPI parity
>>>>
>>>> Every Python package in Fedora **SHOULD** also be available on
>>>> [the Python Package Index](https://pypi.org) (PyPI).
>>>>
>>>> The command `pip install PROJECTNAME` **MUST** install the same
>>>> package (possibly in a different version), install nothing, or
>>>> fail with a reasonable error message.
>>>
>>>
>>> What should I imagine under "reasonable error message"?
>>
>> One that explains the situation. Not a segfault.
>> I think it's fine to leave this to the packager.
>
>
> Maybe I'm missing some context, but I'm lost. Are we proposing to add
> new functionality to pip that somehow handles this? Or how could the
> packager influence pip's error message?
Try:
$ pip install fedora
|$ pip install fedora||
||Defaulting to user installation because normal site-packages is not
writeable||
||Collecting fedora||
|| Downloading fedora-0.tar.gz (2.0 kB)||
||Building wheels for collected packages: fedora||
|| Building wheel for fedora (setup.py) ... error||
|| ERROR: Command errored out with exit status 1:||
|| command: /usr/bin/python -u -c 'import sys, setuptools, tokenize;
sys.argv[0] =
'"'"'/tmp/pip-install-d5gw3ura/fedora/setup.py'"'"';
__file__='"'"'/tmp/pip-install-d5gw3ura/fedora/setup.py'"'"';f=getattr(tokenize,
'"'"'open'"'"',
open)(__file__);code=f.read().replace('"'"'\r\n'"'"',
'"'"'\n'"'"');f.close();exec(compile(code,
__file__, '"'"'exec'"'"'))'
bdist_wheel -d /tmp/pip-wheel-baiub5ca||
|| cwd: /tmp/pip-install-d5gw3ura/fedora/||
|| Complete output (72 lines):||
|| running bdist_wheel||
|| running build||
|| running build_py||
||------------------------------------------------------------------------||
|| # `fedora` on PyPI||
||
|| This dummy project is not installable.||
|| You probably want `python-fedora` instead.||
||
||
|| ## pyproject.toml tool.fedora namespace||
||
|| The [PEP
518](https://www.python.org/dev/peps/pep-0518/#tool-table)
declares||
|| that a project can use the subtable `tool.$NAME` if `pyproject.toml`
if,||
|| and only if, they own the entry for `$NAME` in the Cheeseshop/PyPI.||
||
|| That's what this project is for.||
|| We own the entry for `fedora`, so we could use `tool.fedora` in .||
||
|| ## python-fedora||
||
|| The Fedora Infra's
[
python-fedora](https://github.com/fedora-infra/python-fedora)||
|| project provides an importable module named `fedora`.||
||
|| This goes against the convention that PyPI distribution names should||
|| match the module names.||
|| But, python-fedora pre-dates wide use of that convention, and the
issue||
|| is hard to fix now.||
||
|| Please install `python-fedora` to get the Fedora Infra's package.||
||
|| ### Please: Don't install packages blindly||
||
|| When you see the exception:||
||
|| ```||
|| ModuleNotFoundError: No module named 'foo'||
|| ```||
||
|| … please research the actual requirements instead of going directly
for||
|| `pip install foo`.||
|| The project (distribution) name may differ from the module(s) it||
|| provides.||
||
||------------------------------------------------------------------------||
|| Traceback (most recent call last):||
|| File "<string>", line 1, in <module>||
|| File "/tmp/pip-install-d5gw3ura/fedora/setup.py", line 38, in
<module>||
|| zip_safe=False,||
|| File
"/home/torsava/.local/lib/python3.7/site-packages/setuptools/__init__.py",
line 144, in setup||
|| return distutils.core.setup(**attrs)||
|| File "/usr/lib64/python3.7/distutils/core.py", line 148, in setup||
|| dist.run_commands()||
|| File "/usr/lib64/python3.7/distutils/dist.py", line 966, in
run_commands||
|| self.run_command(cmd)||
|| File "/usr/lib64/python3.7/distutils/dist.py", line 985, in
run_command||
|| cmd_obj.run()||
|| File
"/home/torsava/.local/lib/python3.7/site-packages/wheel/bdist_wheel.py",
line 223, in run||
|| self.run_command('build')||
|| File "/usr/lib64/python3.7/distutils/cmd.py", line 313, in
run_command||
|| self.distribution.run_command(command)||
|| File "/usr/lib64/python3.7/distutils/dist.py", line 985, in
run_command||
|| cmd_obj.run()||
|| File "/usr/lib64/python3.7/distutils/command/build.py", line 135,
in run||
|| self.run_command(cmd_name)||
|| File "/usr/lib64/python3.7/distutils/cmd.py", line 313, in
run_command||
|| self.distribution.run_command(command)||
|| File "/usr/lib64/python3.7/distutils/dist.py", line 985, in
run_command||
|| cmd_obj.run()||
|| File "/tmp/pip-install-d5gw3ura/fedora/setup.py", line 20, in run||
|| '"fedora" is not installable. You probably want
python-fedora.'||
|| ValueError: "fedora" is not installable. You probably want
python-fedora.||
|| ----------------------------------------||
|| ERROR: Failed building wheel for fedora||
|| Running setup.py clean for fedora||
||Failed to build fedora||
||Installing collected packages: fedora||
|| Running setup.py install for fedora ... error||
|| ERROR: Command errored out with exit status 1:||
|| command: /usr/bin/python -u -c 'import sys, setuptools, tokenize;
sys.argv[0] =
'"'"'/tmp/pip-install-d5gw3ura/fedora/setup.py'"'"';
__file__='"'"'/tmp/pip-install-d5gw3ura/fedora/setup.py'"'"';f=getattr(tokenize,
'"'"'open'"'"',
open)(__file__);code=f.read().replace('"'"'\r\n'"'"',
'"'"'\n'"'"');f.close();exec(compile(code,
__file__, '"'"'exec'"'"'))'
install --record /tmp/pip-record-6ta5hb06/install-record.txt
--single-version-externally-managed --user --prefix= --compile
--install-headers /home/torsava/.local/include/python3.7m/fedora||
|| cwd: /tmp/pip-install-d5gw3ura/fedora/||
|| Complete output (74 lines):||
|| running install||
|| running build||
|| running build_py||
||------------------------------------------------------------------------||
|| # `fedora` on PyPI||
||
|| This dummy project is not installable.||
|| You probably want `python-fedora` instead.||
||
||
|| ## pyproject.toml tool.fedora namespace||
||
|| The [PEP
518](https://www.python.org/dev/peps/pep-0518/#tool-table) declares||
|| that a project can use the subtable `tool.$NAME` if
`pyproject.toml` if,||
|| and only if, they own the entry for `$NAME` in the Cheeseshop/PyPI.||
||
|| That's what this project is for.||
|| We own the entry for `fedora`, so we could use `tool.fedora` in .||
||
|| ## python-fedora||
||
|| The Fedora Infra's
[
python-fedora](https://github.com/fedora-infra/python-fedora)||
|| project provides an importable module named `fedora`.||
||
|| This goes against the convention that PyPI distribution names should||
|| match the module names.||
|| But, python-fedora pre-dates wide use of that convention, and the
issue||
|| is hard to fix now.||
||
|| Please install `python-fedora` to get the Fedora Infra's package.||
||
|| ### Please: Don't install packages blindly||
||
|| When you see the exception:||
||
|| ```||
|| ModuleNotFoundError: No module named 'foo'||
|| ```||
||
|| … please research the actual requirements instead of going
directly for||
|| `pip install foo`.||
|| The project (distribution) name may differ from the module(s) it||
|| provides.||
||
||------------------------------------------------------------------------||
|| Traceback (most recent call last):||
|| File "<string>", line 1, in <module>||
|| File "/tmp/pip-install-d5gw3ura/fedora/setup.py", line 38, in
<module>||
|| zip_safe=False,||
|| File
"/home/torsava/.local/lib/python3.7/site-packages/setuptools/__init__.py",
line 144, in setup||
|| return distutils.core.setup(**attrs)||
|| File "/usr/lib64/python3.7/distutils/core.py", line 148, in setup||
|| dist.run_commands()||
|| File "/usr/lib64/python3.7/distutils/dist.py", line 966, in
run_commands||
|| self.run_command(cmd)||
|| File "/usr/lib64/python3.7/distutils/dist.py", line 985, in
run_command||
|| cmd_obj.run()||
|| File
"/home/torsava/.local/lib/python3.7/site-packages/setuptools/command/install.py",
line 61, in run||
|| return orig.install.run(self)||
|| File "/usr/lib64/python3.7/distutils/command/install.py", line
556, in run||
|| self.run_command('build')||
|| File "/usr/lib64/python3.7/distutils/cmd.py", line 313, in
run_command||
|| self.distribution.run_command(command)||
|| File "/usr/lib64/python3.7/distutils/dist.py", line 985, in
run_command||
|| cmd_obj.run()||
|| File "/usr/lib64/python3.7/distutils/command/build.py", line
135, in run||
|| self.run_command(cmd_name)||
|| File "/usr/lib64/python3.7/distutils/cmd.py", line 313, in
run_command||
|| self.distribution.run_command(command)||
|| File "/usr/lib64/python3.7/distutils/dist.py", line 985, in
run_command||
|| cmd_obj.run()||
|| File "/tmp/pip-install-d5gw3ura/fedora/setup.py", line 20, in run||
|| '"fedora" is not installable. You probably want
python-fedora.'||
|| ValueError: "fedora" is not installable. You probably want
python-fedora.||
|| ----------------------------------------||
||ERROR: Command errored out with exit status 1: /usr/bin/python -u -c
'import sys, setuptools, tokenize; sys.argv[0] =
'"'"'/tmp/pip-install-d5gw3ura/fedora/setup.py'"'"';
__file__='"'"'/tmp/pip-install-d5gw3ura/fedora/setup.py'"'"';f=getattr(tokenize,
'"'"'open'"'"',
open)(__file__);code=f.read().replace('"'"'\r\n'"'"',
'"'"'\n'"'"');f.close();exec(compile(code,
__file__, '"'"'exec'"'"'))'
install --record /tmp/pip-record-6ta5hb06/install-record.txt
--single-version-externally-managed --user --prefix= --compile
--install-headers /home/torsava/.local/include/python3.7m/fedora Check
the logs for full command output.|
I see what you mean.
On the other hand, that's a pretty horrible error message format
(posting in it's entirety for others to consider).
Is there no better way to achieve this? For a few packages it's ok, but
I would be weary of introducing this to too many packages.
In the proposal there's talk of blocking the name on PyPI. Is this the
way the blocking will be achieved?