Python PyPi正在添加破折号-&引用;到版本名称的开头和结尾

Python PyPi正在添加破折号-&引用;到版本名称的开头和结尾,python,upload,pip,setuptools,pypi,Python,Upload,Pip,Setuptools,Pypi,我正在尝试将我的包上载到PyPI上,但它无法工作。看起来PyPi或setuptools正在我的版本名前后添加-。最初,我有以下版本:ß-2018.8,但我认为unicode字符不起作用。然后我把它移到了beta-2018.8,但那也不起作用。我甚至试过一个基本的2018.8,但还是一样的错误 有人能帮我弄清楚发生了什么事吗 我的pip版本: pip 18.0 from /Users/mu/anaconda/envs/py3_clone/lib/python3.6/site-packages/pi

我正在尝试将我的包上载到PyPI上,但它无法工作。看起来
PyPi
setuptools
正在我的版本名前后添加
-
。最初,我有以下版本:
ß-2018.8
,但我认为unicode字符不起作用。然后我把它移到了beta-2018.8,但那也不起作用。我甚至试过一个基本的
2018.8
,但还是一样的错误

有人能帮我弄清楚发生了什么事吗

我的pip版本:

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
My
\uuuu init\uuuuu.py

# =======
# Version
# =======
__version__="beta-2018.08"
My
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

这是因为该版本的双引号:

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('"')

这是因为该版本的双引号:

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('"')

为什么你要把
\uuuu init\uuuuuuuuuuuuuuuuupy
当作普通文本文件来处理,而不是导入
ThisismPackagename
并简单地获取
ThisismPackagename.uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu.py>的值?这就是
skbio
所做的,我把它们作为参考,因为这是我的第一个软件包:你应该遵循PyPA教程,而不是挑选一个随机的包,试图找出他们做什么,并复制它;它会简单得多,而且你可以避免仅仅因为你在跟踪不知道他们在做什么的人而做一些黑客行为的风险。此外,“beta-2018.08”可能不是一个好的版本名。您希望您的版本能够被相对愚蠢的软件解析和订购(因此2018.08在测试版之后,而不是之前),这意味着您希望遵守此类软件所期望的规则。这些规则在教程中有记录和解释,但IIRC,除了整串比较之外,这些工具唯一知道如何处理的是最后一个非数字尾部的虚线数字。你为什么把
\uuuu init\uuuuuuuuuuy.py
当作普通的文本文件来处理,而不是导入
thismypackagename
,然后简单地获取
thismypackagename.\uu version\uuuuuuuu
的值?这就是skbio的功能是什么,我用他们的作为参考,因为这是我的第一个软件包:你应该遵循PyPA教程,而不是随机挑选一个软件包,试图找出他们的功能并复制它;它会简单得多,而且你可以避免仅仅因为你在跟踪不知道他们在做什么的人而做一些黑客行为的风险。此外,“beta-2018.08”可能不是一个好的版本名。您希望您的版本能够被相对愚蠢的软件解析和订购(因此2018.08在测试版之后,而不是之前),这意味着您希望遵守此类软件所期望的规则。这些规则都有文档记录,并在教程中进行了解释,但是IIRC,除了整个字符串比较之外,这些工具唯一知道如何处理的是带有最后一个非数字尾部的虚线数字。