setuptools是否允许在自定义位置而不是.pypirc中指定$HOME/.pypirc文件?我正在设置一个Jenkins作业以发布到内部存储库,并希望.pypirc文件位于作业的工作区内。

最佳答案

这可以通过重载用于与PYPI或自定义存储库服务器通信的默认命令类来实现。这可以在您的setup.py脚本中完成。让代码先进行对话:

# this is your project's setup.py script

import os
from distutils.command.register import register as register_orig
from distutils.command.upload import upload as upload_orig

from setuptools import setup


class register(register_orig):

    def _get_rc_file(self):
        return os.path.join('.', '.pypirc')

class upload(upload_orig):

    def _get_rc_file(self):
        return os.path.join('.', '.pypirc')

setup(
    name='myproj',
    ...
    cmdclass={
        'register': register,
        'upload': upload,
    }
)

现在,如果你打电话给
$ python setup.py sdist register upload

服务器凭据将从项目目录中的.pypirc获取,而不是默认的~/.pypirc凭据。
因此,基本上,您需要做的就是用自己的实现替换registerupload命令。这些实现使用您自己的逻辑重新定义_get_rc_file方法。之后,不要忘了调整函数中的cmd_class参数,以便使用自己的命令类而不是标准类。
当然,由于这两个类都重新定义了相同的方法,您可以通过编写一个mixin类并重用它等来美化代码。此外,如果您通过setup命令将sphinx文档上载到pypi,则必须以相同的方式重载它。无论如何,您应该从上面的代码片段中了解命令重载的基本概念。

关于python - .pypirc文件的自定义位置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37845125/

10-10 15:58