setuptools
是否允许在自定义位置而不是.pypirc
中指定$HOME/.pypirc
文件?我正在设置jenkins作业以发布到内部存储库,并希望.pypirc
文件位于作业的工作区内。
答案 0 :(得分:6)
这可以通过重载用于与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
。
基本上,您需要做的就是用您自己的实现替换register
和upload
命令。这些实现使用您自己的逻辑重新定义_get_rc_file
方法。之后,不要忘记调整cmd_class
函数中的setup
参数,以便使用自己的命令类而不是标准类。
当然,因为这两个类都重新定义了相同的方法,所以你可以通过例如写一个mixin类并重复使用它等等。另外,如果你通过upload_docs
命令将sphinx文档上传到PyPI,你必须以相同的方式重载它。无论如何,你应该从上面的代码片段中获得命令重载的基本概念。
答案 1 :(得分:5)
您可能想查看twine。此工具允许您通过选项.pypirc
--config-file
文件
答案 2 :(得分:1)
在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
环境变量。