I’m in the final step of publishing python package to PyPi, I got the following error. and it’s extremely confusing. What does the url here refer to? and how can I get it working. thank you for your help!
WARNING Error during upload. Retry with the --verbose option for
more details.
ERROR HTTPError: 400 Bad Request from https://upload.pypi.org/legacy/
Must have a URL. See
https://packaging.python.org/specifications/core-metadata
for more information.
twine upload dist/* --verbose
INFO Using configuration from /Users/delongzhai/.pypirc
Uploading distributions to https://upload.pypi.org/legacy/
INFO dist/msgbridge-0.1.0-py3-none-any.whl (14.9 KB)
INFO dist/msgbridge-0.1.0.tar.gz (134.7 KB)
INFO password set from config file
INFO username: __token__
INFO password: <hidden>
Uploading msgbridge-0.1.0-py3-none-any.whl
100% ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 24.6/24.6 kB • 00:00 • 92.9 MB/s
INFO Response from https://upload.pypi.org/legacy/:
400 Must have a URL. See https://packaging.python.org/specifications/core-metadata for more information.
INFO <html>
<head>
<title>400 Must have a URL. See https://packaging.python.org/specifications/core-metadata for more information.</title>
</head>
<body>
<h1>400 Must have a URL. See https://packaging.python.org/specifications/core-metadata for more information.</h1>
The server could not comply with the request since it is either malformed or otherwise incorrect.<br/><br/>
Must have a URL. See https://packaging.python.org/specifications/core-metadata for more information.
</body>
</html>
ERROR HTTPError: 400 Bad Request from https://upload.pypi.org/legacy/
Based on the warehouse source code, what is meant is that project.urls for some reason has an empty url instead of just not existing. I imagine this is a bug in hatch, but you should be able to work around this by just not including "urls" in dynamic.
I see you’ve got a url in your setup.py. Just replicate to the pyproject.toml. In fact, do you even need a setup.py?
BTW, msgbridge is a very generic top level name for what seems to be
tiny piece of special purpose TypeScript. Had you considered something
like zdl-msgbridge etc?
thank you for your response. Yes the link you share was me. Was trying to go through the tutorial on Jupyter extension development. But there’s something that just doesn’t come together.
I think the naming of it come from “bridging JupyterLite REPL iframe and postMessage the json object to hosting application”. That name does sound to be very generic and functionality-limited. I agree that it should be updated. However, is there anything I should watch out. Like deleting all from PiPy?