【问题标题】:PyPi is adding dashes "-" to the beginning and end of version namePyPi 在版本名称的开头和结尾添加破折号“-”
【发布时间】:2019-01-31 02:38:51
【问题描述】:

我正在尝试将我的包上传到 PyPI,但它不起作用。看起来PyPisetuptools 在我的版本名称前后添加-。最初,我有以下版本:ß-2018.8 但我认为 unicode 字符不起作用。然后我将其移至beta-2018.8,但这也不起作用。我什至尝试了基本的2018.8,但仍然是同样的错误?!

谁能帮我弄清楚发生了什么?

我的点子版本:

pip 18.0 from /Users/mu/anaconda/envs/py3_clone/lib/python3.6/site-packages/pip (python 3.6)

我的命令:

python setup.py register sdist upload

我的错误:

Submitting dist/thisismypackagename--2018.08-.tar.gz to 

https://upload.pypi.org/legacy/
Upload failed (400): '-2018.08-' is an invalid value for Version. Error: Start and end with a letter or numeral containing only ASCII numeric and '.', '_' and '-'. See https://packaging.python.org/specifications/core-metadata
error: Upload failed (400): '-2018.08-' is an invalid value for Version. Error: Start and end with a letter or numeral containing only ASCII numeric and '.', '_' and '-'. See https://packaging.python.org/specifications/core-metadata

我的__init__.py

# =======
# Version
# =======
__version__="beta-2018.08"

我的setup.py

import re
from setuptools import setup

# Version
version = None
with open("./thisismypackagename/__init__.py", "r") as f:
    for line in f.readlines():
        line = line.strip()
        if line.startswith("__version__"):
            version = line.split("=")[-1].strip()

setup(name='thisismypackagename',
      version=version,
      description='package description',
      author='Josh L. Espinoza',
      packages=["thisismypackagename"],
      zip_safe=False)

这是我的目录结构:

thisismypackagename
    | thisismypackagename
    | thisismypackagename | __init__.py
    | setup.py

【问题讨论】:

  • 你为什么要把__init__.py当作一个普通的文本文件,而不是导入thisismypackagename然后简单地获取thisismypackagename.__version__的值?
  • skbio 就是这样做的,我用他们的作为参考,因为这是我的第一个包:github.com/biocore/scikit-bio/blob/master/setup.py
  • 您应该遵循 PyPA 教程,而不是随机选择一个包并试图弄清楚他们做了什么并复制它;它会简单得多,并且您可以避免仅仅因为您正在关注不知道他们在做什么的其他人而做一些骇人听闻的事情的风险。
  • 另外,“beta-2018.08”可能不是一个好的版本名称。您希望您的版本可被相对愚蠢的软件解析和订购(因此 2018.08 是在其 beta 之后,而不是之前),这意味着您希望遵循此类软件所期望的规则。这些规则已记录在案,并在教程中进行了解释,但 IIRC,除了全字符串比较之外,这些工具知道如何处理的唯一事情是带有一个最终非数字预告片的虚线数字。

标签: python upload pip setuptools pypi


【解决方案1】:

这是因为版本两边的双引号:

version = None
with open("./thisismypackagename/__init__.py", "r") as f:
    for line in f.readlines():
        line = line.strip()
        if line.startswith("__version__"):
            version = line.split("=")[-1].strip()
print version
# "beta-2018.08"

PyPI 正在用双引号代替破折号。去掉双引号,问题解决:

version = line.split("=")[-1].strip().strip('"')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-02
    • 1970-01-01
    • 2012-02-09
    • 1970-01-01
    • 2017-05-28
    • 1970-01-01
    • 2020-09-05
    • 2023-04-06
    相关资源
    最近更新 更多