安装python-saml遇构建依赖错误及EOFError问题求助
安装python-saml时的构建依赖报错处理
问题描述
尝试安装python-saml时出现构建依赖错误,未给出明确失败原因,触发如下报错:
Traceback (most recent call last): File "C:\Users\ubhat\Projects\etl\Lib\site-packages\pip\_internal\cli\base_command.py", line 180, in exc_logging_wrapper status = run_func(*args) ^^^^^^^^^^^^^^^ File "C:\Users\ubhat\Projects\etl\Lib\site-packages\pip\_internal\cli\req_command.py", line 245, in wrapper return func(self, options, args) ^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ubhat\Projects\etl\Lib\site-packages\pip\_internal\commands\install.py", line 377, in run requirement_set = resolver.resolve( ^^^^^^^^^^^^^^^^^ File "C:\Users\ubhat\Projects\etl\Lib\site-packages\pip\_internal\resolution\resolvelib\resolver.py", line 95, in resolve result = self._result = resolver.resolve( ^^^^^^^^^^^^^^^^^ File "C:\Users\ubhat\Projects\etl\Lib\site-packages\pip\_vendor\resolvelib\resolvers.py", line 546, in resolve state = resolution.resolve(requirements, max_rounds=max_rounds) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ubhat\Projects\etl\Lib\site-packages\pip\_vendor\resolvelib\resolvers.py", line 397, in resolve self._add_to_criteria(self.state.criteria, r, parent=None) File "C:\Users\ubhat\Projects\etl\Lib\site-packages\pip\_vendor\resolvelib\resolvers.py", line 173, in _add_to_criteria if not criterion.candidates: ^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ubhat\Projects\etl\Lib\site-packages\pip\_vendor\resolvelib\structs.py", line 156, in __bool__ return bool(self._sequence) ^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ubhat\Projects\etl\Lib\site-packages\pip\_internal\resolution\resolvelib\found_candidates.py", line 155, in __bool__ return any(self) ^^^^^^^^^ File "C:\Users\ubhat\Projects\etl\Lib\site-packages\pip\_internal\resolution\resolvelib\found_candidates.py", line 143, in <genexpr> return (c for c in iterator if id(c) not in self._incompatible_ids) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ubhat\Projects\etl\Lib\site-packages\pip\_internal\resolution\resolvelib\found_candidates.py", line 44, in _iter_built for version, func in infos: File "C:\Users\ubhat\Projects\etl\Lib\site-packages\pip\_internal\resolution\resolvelib\factory.py", line 284, in iter_index_candidate_infos result = self._finder.find_best_candidate( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ubhat\Projects\etl\Lib\site-packages\pip\_internal\index\package_finder.py", line 890, in find_best_candidate candidates = self.find_all_candidates(project_name) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ubhat\Projects\etl\Lib\site-packages\pip\_internal\index\package_finder.py", line 831, in find_all_candidates page_candidates = list(page_candidates_it) ^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ubhat\Projects\etl\Lib\site-packages\pip\_internal\index\sources.py", line 134, in page_candidates yield from self._candidates_from_page(self._link) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ubhat\Projects\etl\Lib\site-packages\pip\_internal\index\package_finder.py", line 791, in process_project_url index_response = self._link_collector.fetch_response(project_url) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ubhat\Projects\etl\Lib\site-packages\pip\_internal\index\collector.py", line 461, in fetch_response return _get_index_content(location, session=self.session) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ubhat\Projects\etl\Lib\site-packages\pip\_internal\index\collector.py", line 364, in _get_index_content resp = _get_simple_response(url, session=session) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ubhat\Projects\etl\Lib\site-packages\pip\_internal\index\collector.py", line 135, in _get_simple_response resp = session.get( ^^^^^^^^^^^^ File "C:\Users\ubhat\Projects\etl\Lib\site-packages\pip\_vendor\requests\sessions.py", line 602, in get return self.request("GET", url, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ubhat\Projects\etl\Lib\site-packages\pip\_internal\network\session.py", line 519, in request return super().request(method, url, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ubhat\Projects\etl\Lib\site-packages\pip\_vendor\requests\sessions.py", line 589, in request resp = self.send(prep, **send_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ubhat\Projects\etl\Lib\site-packages\pip\_vendor\requests\sessions.py", line 710, in send r = dispatch_hook("response", hooks, r, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ubhat\Projects\etl\Lib\site-packages\pip\_vendor\requests\hooks.py", line 30, in dispatch_hook _hook_data = hook(hook_data, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ubhat\Projects\etl\Lib\site-packages\pip\_internal\network\auth.py", line 500, in handle_401 username, password, save = self._prompt_for_password(parsed.netloc) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ubhat\Projects\etl\Lib\site-packages\pip\_internal\network\auth.py", line 455, in _prompt_for_password username = ask_input(f"User for {netloc}: ") if self.prompting else None ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ubhat\Projects\etl\Lib\site-packages\pip\_internal\utils\misc.py", line 255, in ask_input return input(message) ^^^^^^^^^^^^^^ EOFError: EOF when reading a line [end of output] note: This error originates from a subprocess, and is likely not a problem with pip. error: subprocess-exited-with-error × pip subprocess to install build dependencies did not run successfully. │ exit code: 2 ╰─> See above for output. note: This error originates from a subprocess, and is likely not a problem with pip.
报错根源
核心错误是EOFError: EOF when reading a line,本质是pip在请求PyPI源资源时遇到401认证要求,需要输入用户名密码,但当前环境无法提供交互式输入(比如非交互式终端、CI/CD脚本环境),导致读取输入流时提前结束,进而引发构建依赖安装失败。
解决步骤
- 配置私有PyPI源认证:如果使用私有PyPI源,提前在配置文件中写入认证信息:
Windows用户修改%APPDATA%\pip\pip.ini,Linux/macOS用户修改~/.config/pip/pip.conf,添加内容:
或者临时在安装命令中指定带认证的源:[global] index-url = https://<你的用户名>:<你的密码>@私有源地址/simple/pip install python-saml --index-url https://<你的用户名>:<你的密码>@私有源地址/simple/ - 处理网络代理/防火墙拦截:若使用默认PyPI源出现该问题,可能是代理或防火墙导致的认证拦截,可切换网络环境,或配置代理:
pip install python-saml --proxy http://<代理用户名>:<代理密码>@代理服务器:端口/ - 禁用交互式提示:在非交互式环境中安装时,添加
--no-input参数跳过输入提示:pip install python-saml --no-input - 离线安装方案:提前在联网环境下载所有依赖包,再离线安装:
# 联网环境下载包到本地目录 pip download python-saml -d ./python-saml-packages # 离线环境安装 pip install --no-index --find-links=./python-saml-packages python-saml
内容的提问来源于stack exchange,提问作者Uma Bhat
相关产品推荐
相关产品推荐

