1

我有一个使用 setup.py 构建的自定义 python 包,其版本如2.0.1, 2.0.2etc 并将其存储在 artifactory 中。

现在在我的requirements.txt如果我这样添加:

custom-package==2.0.2 

它工作得很好。它从工件中获取正确的版本并安装它并继续我的过程。

但如果我把它改成这样:

custom-package==2.*

然后它会2.0.2从 artifactory 中找到最新的自定义包版本,并安装它。但同时它在我的日志文件中显示版本安装0.0.0不是2.0.2这样的:

Collecting custom-package==2.*
Downloading https://swfactory.com/artifactory/api/pypi/pypi/app/custom-package/master/custom-package-2.0.2.tar.gz (77 kB)
WARNING: Requested custom-package==2.* from https://swfactory.com/artifactory/api/pypi/pypi/app/custom-package/master/custom-package-2.0.2.tar.gz#md5=0bfccc319d9b8108540b75d28980482d (from -r requirements.txt (line 1)), but installing version 0.0.0

如果我做 pip pip freeze | grep "custom-package"--> 它0.0.0不给我我2.0.2 应该做出什么改变,以便它反映我的自定义包的正确版本?

我的 setup.py 设置

def version():
    if os.getenv('BRANCH') == "NON_MASTER":
        __version__ = os.getenv('VERSION')
    else:
        __version__ = os.getenv('VERSION')

    return __version__

setup(
    name="custom_package",
    version=version(),
    ......
    ......
4

1 回答 1

0

setup.py是不可能的。

确定版本号不应依赖于外部环境。它应该是静态的或完全取决于sdist本身包含的内容(例如读取 sdist 中包含的文件version.txt)。

我相信这里发生的是,当pip构建sdist时,它是在一个隔离的环境中进行的,如果我没记错的话,这种隔离不会让环境变量通过(除了可能选择的少数几个,比如PIP_*)。那将是我的猜测。无论如何,即使pip的构建隔离不抑制环境变量,也无法控制不同机器上的环境。如果我将它安装在我的机器上,环境变量的值BRANCHVERSION什么?

我不确定它是如何结束的0.0.0,也许这是使用的默认值而不是空字符串。

于 2020-10-15T09:37:49.477 回答