.pypirc 文件的自定义位置

Posted

技术标签:

【中文标题】.pypirc 文件的自定义位置【英文标题】:Custom location for .pypirc file 【发布时间】:2016-10-17 03:22:25 【问题描述】:

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

【问题讨论】:

如果你在 docker 中运行它,它会变得更容易,因为你可以为容器设置HOME var 并挂载一个自定义的/pypirc 【参考方案1】:

这可以通过重载用于与 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 方法。之后,不要忘记调整 setup 函数中的 cmdclass 参数,以便使用您自己的命令类而不是标准类。

当然,由于两个类都重新定义了相同的方法,您可以通过例如美化代码编写一个 mixin 类并重用它等等。另外,如果你通过upload_docs 命令将 sphinx 文档上传到 PyPI,你必须以同样的方式重载它。不管怎样,你应该从上面的sn-p中得到命令重载的基本思路。

【讨论】:

我知道这个答案很旧,但我想知道它是代码 sn-p 中所示的 cmdlcass 还是 sn-p 后面的文本中提到的 cmd_class? /跨度> @andrew-falanga 那是cmdclass :-) 很好! 赞成。感谢您澄清对象名称。 :-) 我刚刚完成了它的实现,它在我们的自动构建系统中运行良好。【参考方案2】:

您可能想查看twine。此工具允许您通过选项 --config-file 指定自定义 .pypirc 文件

【讨论】:

【参考方案3】:

setuptools 的最新版本(版本 29.0.1)中,.pypirc 文件从 $HOME 目录(或 Windows 上的 %USERPROFILE%)加载。

这是在setuptools.package_index.PyPIConfig 类中完成的。请参阅 GitHub 上的source code:

class PyPIConfig(configparser.RawConfigParser):
    def __init__(self):
        """
        Load from ~/.pypirc
        """
        defaults = dict.fromkeys(['username', 'password', 'repository'], '')
        configparser.RawConfigParser.__init__(self, defaults)

        rc = os.path.join(os.path.expanduser('~'), '.pypirc')
        if os.path.exists(rc):
            self.read(rc)

所以,我看到的唯一解决方案是在运行 Jenkins 作业之前临时重新定义 HOME 环境变量。

【讨论】:

以上是关于.pypirc 文件的自定义位置的主要内容,如果未能解决你的问题,请参考以下文章

pycharm的venv文件夹的自定义

使用@sql spring boot test从资源文件夹以外的自定义位置读取.sql文件

将相机图像保存在手机记忆库中的自定义位置

用户位置的自定义注释视图不移动地图视图

如何收听Android中的自定义标记位置变化?

Maven pom.properties 文件中的自定义值