簡體   English   中英

.pypirc文件的自定義位置

[英]Custom location for .pypirc file

setuptools是否允許在自定義位置而不是$HOME/.pypirc指定.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方法。 之后,不要忘記在setup函數中調整cmd_class參數,以便使用自己的命令類而不是標准類。

當然,由於這兩個類都重新定義了相同的方法,你可以通過編寫一個mixin類並重復使用等等來對代碼進行美化。另外,如果你通過upload_docs命令將sphinx文檔上傳到PyPI,你必須重載它方式。 無論如何,你應該從上面的代碼片段中獲得命令重載的基本概念。

你可能想看看麻線 此工具允許您通過選項--config-file指定自定義.pypirc --config-file

在最新版本的setuptools (版本29.0.1)中, .pypirc文件是從$HOME目錄(或Windows上的%USERPROFILE% )加載的。

這是在setuptools.package_index.PyPIConfig類中完成的。 查看GitHub上的源代碼

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環境變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM