Windows Jenkins节点嵌入式Python3.8.9 pip安装报错求助
问题描述
Windows Jenkins工作节点部署了嵌入式Python 3.8.9,已用get-pip.py安装pip,并修改了python38._pth文件:
python38.zip . Lib Lib/site-packages # Uncomment to run site.main() automatically #import site
流水线代码如下:
dir('env'){ bat ''' .\python.exe -m pip config --user set global.extra-index-url "<url>" .\python.exe -m pip install -r requirements.txt --force-reinstall .\python.exe -m pip list ''' }
运行时出现错误:
ERROR: Exception: Traceback (most recent call last): File "D:\jenkins\workspace\<repo-name>_<branch-name>\env\Lib/site-packages\pip\_internal\cli\base_command.py", line 180, in exc_logging_wrapper status = run_func(*args) File "D:\jenkins\workspace\<repo-name>_<branch-name>\env\Lib/site-packages\pip\_internal\cli\req_command.py", line 248, in wrapper return func(self, options, args) File "D:\jenkins\workspace\<repo-name>_<branch-name>\env\Lib/site-packages\pip\_internal\commands\install.py", line 452, in run installed = install_given_reqs( File "D:\jenkins\workspace\<repo-name>_<branch-name>\env\Lib/site-packages\pip\_internal\req\__init__.py", line 72, in install_given_reqs requirement.install( File "D:\jenkins\workspace\<repo-name>_<branch-name>\env\Lib/site-packages\pip\_internal\req\req_install.py", line 780, in install scheme = get_scheme( File "D:\jenkins\workspace\<repo-name_><branch-name>\env\Lib/site-packages\pip\_internal\locations\__init__.py", line 249, in get_scheme old = _distutils.get_scheme( File "D:\jenkins\workspace\<repo-name>_<branch-name>\env\Lib/site-packages\pip\_internal\locations\_distutils.py", line 141, in get_scheme scheme = distutils_scheme(dist_name, user, home, root, isolated, prefix) File "D:\jenkins\workspace\<repo-name>_<branch-name>\env\Lib/site-packages\pip\_internal\locations\_distutils.py", line 80, in distutils_scheme i.finalize_options() File "distutils\command\install.py", line 344, in finalize_options File "distutils\command\install.py", line 487, in convert_paths File "distutils\util.py", line 122, in convert_path ValueError: path '/scratch/data/jenkins/workspace/<repo-name>_<branch-name>_tmp/.local' cannot be absolute
使用嵌入式Python 3.10运行相同流水线无问题。
解决办法
启用site模块
修改python38._pth文件,取消import site的注释:python38.zip . Lib Lib/site-packages # Uncomment to run site.main() automatically import site嵌入式Python默认不启用site模块,导致无法正确识别Windows系统的用户目录规则,启用后能让pip生成符合Windows格式的路径,避免出现Unix风格的绝对路径错误。
移除pip config的
--user参数
流水线中pip config --user会尝试配置用户级pip设置,而嵌入式Python 3.8在Windows下处理用户目录时存在路径解析问题,直接改用全局配置(去掉--user),或者在install命令中直接指定extra-index-url:dir('env'){ bat ''' .\python.exe -m pip install -r requirements.txt --force-reinstall --extra-index-url "<url>" .\python.exe -m pip list ''' }指定pip安装目标路径
在pip install时通过--target参数明确指定依赖安装到当前环境的site-packages目录,避免pip自动查找用户目录:dir('env'){ bat ''' .\python.exe -m pip install -r requirements.txt --force-reinstall --extra-index-url "<url>" --target ./Lib/site-packages .\python.exe -m pip list ''' }检查Jenkins节点的HOME环境变量
确保Jenkins运行用户的HOME环境变量是Windows格式的绝对路径(比如C:\Users\JenkinsUser),如果HOME被设置为Unix风格路径,Python 3.8的pip会错误生成类Unix路径导致报错。在Jenkins节点的系统配置中检查或手动设置HOME环境变量。
内容的提问来源于stack exchange,提问作者OKayTee
相关产品推荐
相关产品推荐

