Subject: Re: bug#52836: "guix import pypi" fails with "Failed to extract file from wheel" and "no requires.txt file found"
From: zimoun <[email-masked]>
To: bbb ee <[email-masked]>
Cc: [email-masked]
Date: Tue, 08 Mar 2022 11:14:44 +0100
List-Id: <debbugs-submit.debbugs.gnu.org>

Hi,

On ven., 31 déc. 2021 at 12:00, zimoun <[email-masked]> wrote:
> On Fri, 31 Dec 2021 at 11:15, bbb ee <[email-masked]> wrote:
>
>> > Is it a bug on Guix side or upstream?  Because it seems that upstream
>> > does not provide metadata information, at least, as usually expected.
>>
>> `pip install PyPortfolioOpt`, `poetry add PyPortfolioOpt` runs for me. If other python package installer can run, I suppose the upstream is correct.
>
> Hum, not necessary.  Well, I do not think that 'pip' uses all the
> metadata from PyPI to install.  'pip' does dirty things and yes it
> just works :-)  But this does not imply that PyPortfolioOpt is
> correctly packaged as it is defined by PyPI standards.  I do not know
> 'poetry'.
>
> Anyway. :-)  I am not finding the PEP defining the Python packaging
> and the structure for a PyPI package.  Because it is not clear for me
> if it is a bug on Guix side or upstream.

This package PyPortfolioOpt is badly packaged upstream.  We cannot do
better than warn about the issue:

--8<---------------cut here---------------start------------->8---
$ guix import pypi  PyPortfolioOpt
following redirection to `https://pypi.org/pypi/pyportfolioopt/json'...

Starting download of /tmp/guix-file.6rSGsS
From https://files.pythonhosted.org/packages/97/c2/c7569f2773f3e942367e90dcca15a235af3d3330ac8abfcbfbe67a8ba8dd/PyPortfolioOpt-1.5.1.tar.gz...
 …t-1.5.1.tar.gz  56KiB               8.2MiB/s 00:00 [##################] 100.0%

Starting download of /tmp/guix-file.MFmUSK
From https://files.pythonhosted.org/packages/90/98/3906835b783ba39cfc613c7b0c0fde9c758c729ff3406d45f1c2a1116961/PyPortfolioOpt-1.5.1-py3-none-any.whl...
 ….1-py3-none-any.whl  60KiB         45.2MiB/s 00:00 [##################] 100.0%
guix import: warning: Failed to extract file: PyPortfolioOpt-1.5.1.dist-info/METADATA from wheel.
guix import: warning: Cannot guess requirements from source archive: no requires.txt file found.
guix import: warning: project name pyportfolioopt does not appear verbatim in the PyPI URI
hint: The PyPI URI is:
`https://files.pythonhosted.org/packages/97/c2/c7569f2773f3e942367e90dcca15
a235af3d3330ac8abfcbfbe67a8ba8dd/PyPortfolioOpt-1.5.1.tar.gz'.  You should
review the pypi-uri declaration in the generated package.  You may need to
replace "pyportfolioopt" with a substring of the PyPI URI that identifies
the package.

(package
  (name "python-pyportfolioopt")
  (version "1.5.1")
  (source
    (origin
      (method url-fetch)
      (uri (pypi-uri "pyportfolioopt" version))
      (sha256
        (base32 "162d6jyvba0xk2blssbp52rrjqpjv011h988k150p1fg7x7nzbs9"))))
  (build-system python-build-system)
  (home-page "https://github.com/robertmartin8/PyPortfolioOpt")
  (synopsis "Financial portfolio optimization in python")
  (description "Financial portfolio optimization in python")
  (license license:expat))
--8<---------------cut here---------------end--------------->8---

Therefore, I am closing.  Feel free to reopen if I missed a point.

Cheers,
simon