Ubuntu 18.04安装pythonnet遇nuget/mono异常,求解决方案
解决Ubuntu 18.04下安装pythonnet时的nuget代理/URI错误问题
你遇到的Invalid URI: Invalid port specified错误,核心原因是Git全局代理设置干扰了nuget的网络请求——nuget会自动继承系统或Git的代理配置,但旧版本nuget对代理格式的兼容性较差,加上你之前设置的Git代理在nuget环境下解析出了问题。下面是几个针对性的解决办法,按优先级尝试:
方法1:临时取消Git全局代理(最快速)
你之前通过git config --global http.proxy设置了全局代理,这会被nuget继承,但可能导致端口解析错误。先临时取消这个设置:
git config --global --unset http.proxy
然后重新运行pythonnet的安装命令:
/usr/bin/python3 -m pip install -U pythonnet --user
如果你的网络环境不需要代理就能访问nuget.org,这个方法应该能直接解决问题。
方法2:直接给nuget配置代理(需保留代理时用)
如果必须用代理才能访问外部网络,不要依赖Git的代理设置,而是直接给nuget单独配置:
- 进入你克隆的pythonnet仓库目录
- 运行以下命令设置nuget的代理(替换成你的真实代理地址和端口):
mono tools/nuget/nuget.exe config -set http_proxy=http://my.proxy.address:port mono tools/nuget/nuget.exe config -set https_proxy=http://my.proxy.address:port
- 再尝试运行nuget更新命令:
mono tools/nuget/nuget.exe update -self
完成后回到仓库根目录,重新执行pythonnet的安装流程。
方法3:手动替换最新版nuget.exe(解决旧版本兼容性问题)
旧版本nuget对代理的支持确实存在bug,你找到的issue里提到的Windows场景其实和Linux下的底层问题一致,可以手动替换成最新版:
- 下载适配Mono的最新版nuget.exe
- 替换pythonnet仓库中
tools/nuget/目录下的旧nuget.exe文件 - 再次运行
mono tools/nuget/nuget.exe update -self,此时应该能正常完成更新 - 继续执行
pip install命令安装pythonnet
方法4:跳过nuget自我更新(绕过问题)
如果上面的方法都不行,可以强制pip在安装时跳过nuget的自我更新步骤,使用--no-build-isolation参数:
/usr/bin/python3 -m pip install -U pythonnet --user --no-build-isolation
这个参数会让pip使用系统已安装的依赖(你已经装了clang、mono),避免在构建过程中自动运行nuget更新。
额外注意点
- 确保你的代理地址和端口没有拼写错误,比如端口是纯数字,没有多余的符号或空格
- Ubuntu 18.04上的Mono 5.16版本相对较旧,如果后续还有其他问题,可以考虑升级到Mono 6.x版本
内容的提问来源于stack exchange,提问作者Data Mastery
相关产品推荐
相关产品推荐

