You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Artifacts上传Python包遇认证问题:Twine反复要求输入用户名

Azure Artifacts 上传Python包自动认证失败问题

我严格按照官方文档操作将Python包上传至内部Azure Artifacts,Twine认证已成功,但上传至Feed时始终要求输入用户名,无法实现无需手动输入用户名和密码的自动认证发布,我的配置是否存在问题?

使用工具

  • Twine - 最新版本
  • Azure-keyring - 最新版本
  • keyring - 最新版本
  • Python 3.10

Azure流水线步骤

- task: TwineAuthenticate@1
  inputs:
    artifactFeed: feedName
  displayName: Twine Authenticate

- script: | 
    twine upload -r feedName --config-file $(System.DefaultWorkingDirectory)\.pypirc dist/*.whl
  displayName: Publish Package1

PyPirc文件内容

[distutils]
Index-servers =
  feedName

[feedName]
Repository = https://<host>/tfs/***-Collection/_packaging/feedName/pypi/upload

Twine Authenticate任务日志

=======================================================================
Task         : Python twine upload authenticate....
=======================================================================
SYSTEMVSSCONNECTION exists true
SYSTEMVSSCONNECTION exists true
Adding authentication to configuration for registry Neon
Successfully added auth for 1 internal feed and 0 external endpoint.
Finishing: Twine Authenticate

Publish Package任务日志

Uploading distributions to 
https://******/tfs/****-Collection/_packaging/****/pypi/upload
INFO     dist\***_test_framework-0.1.0-py3-none-any.whl (1.2 KB)              
INFO     Querying keyring for username                                         
WARNING  Error getting username from keyring                                   
         Traceback (most recent call last):                                    
           File "C:\Python310\lib\site-packages\twine\auth.py", line 59, in    
         get_username_from_keyring                                               
             creds = keyring.get_credential(system, None)                      
           File "C:\Python310\lib\site-packages\keyring\core.py", line 72, in  
         get_credential                                                        
             return get_keyring().get_credential(service_name, username)        
           File "C:\Python310\lib\site-packages\keyring\backends\chainer.py",  
         line 71, in get_credential                                              
             credential = keyring.get_credential(service, username)             
           File "C:\Python310\lib\site-packages\artifacts_keyring\__init__.py",
         line 58, in get_credential                                              
             username, password = provider.get_credentials(service)      
    Traceback (most recent call last):
      File "C:\Python310\lib\runpy.py", line 196, in _run_module_as_main
        return _run_code(code, main_globals, None,
      File "C:\Python310\lib\runpy.py", line 86, in _run_code
               File "C:\Python310\lib\site-packages\artifacts_keyring\plugin.py",  
             line 67, in get_credentials                                           
                 username, password =                                              
             self._get_credentials_from_credential_provider(url, is_retry=False)    
               File "C:\Python310\lib\site-packages\artifacts_keyring\plugin.py",  
             line 124, in _get_credentials_from_credential_provider                 
                 raise RuntimeError("Failed to get credentials: process with PID    
             {pid} exited with code {code}; additional error message: {error}"      
             RuntimeError: Failed to get credentials: process with PID 164 exited   
             with code 2; additional error message:                                
        exec(code, run_globals)
      File "C:\Python310\lib\site-packages\twine\__main__.py", line 51, in <module>
        sys.exit(main())
      File "C:\Python310\lib\site-packages\twine\__main__.py", line 33, in main
        error = cli.dispatch(sys.argv[1:])
      File "C:\Python310\lib\site-packages\twine\cli.py", line 123, in dispatch
        return main(args.args)
      File "C:\Python310\lib\site-packages\twine\commands\upload.py", line 198, in main
        return upload(upload_settings, parsed_args.dists)
      File "C:\Python310\lib\site-packages\twine\commands\upload.py", line 127, in upload
        repository = upload_settings.create_repository()
      File "C:\Python310\lib\site-packages\twine\settings.py", line 329, in create_repository
        self.username,
      File "C:\Python310\lib\site-packages\twine\settings.py", line 131, in username
        return cast(Optional[str], self.auth.username)
      File "C:\Python310\lib\site-packages\twine\auth.py", line 34, in username
        return utils.get_userpass_value(
      File "C:\Python310\lib\site-packages\twine\utils.py", line 248, in get_userpass_value
        value = prompt_strategy()
      File "C:\Python310\lib\site-packages\twine\auth.py", line 85, in username_from_keyring_or_prompt
        return self.prompt("username", input)
      File "C:\Python310\lib\site-packages\twine\auth.py", line 96, in prompt
        return how(f"Enter your {what}: ")
    EOFError: EOF when reading a line
    ##[error]PowerShell exited with code '1'.

问题截图

问题截图

内容的提问来源于stack exchange,提问作者Naga

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 17:48:29