如何调整Nix Flake配置以运行依赖Ollama的Python脚本?
解决Ollama+LangChain在Nix开发环境中端口11434连接拒绝的问题
问题场景
已通过Nix Flake创建包含Ollama和LangChain的Python开发环境,执行nix develop后环境正常,但运行依赖Ollama的Python脚本c.py时,出现localhost端口11434连接拒绝错误。
涉及代码与配置
c.py脚本
from langchain_community.llms import Ollama llm = Ollama(model="llama2") llm.invoke("Tell me a joke")
Nix Flake配置
{ description = "Python environment with ollama"; inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; inputs.flake-utils.url = "github:numtide/flake-utils"; outputs = { self, nixpkgs, flake-utils }: flake-utils.lib.eachDefaultSystem (system: let pkgs = nixpkgs.legacyPackages.${system}; python = pkgs.python311; ollama=pkgs.ollama; Py = python.withPackages (ps: with ps; [ langchain ]); in { devShells.default = pkgs.mkShell { buildInputs = [ ollama Py ]; }; }); }
核心错误信息
requests.exceptions.ConnectionError: HTTPConnectionPool(host='localhost', port=11434): Max retries exceeded with url: /api/generate (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7ffff4b1d510>: Failed to establish a new connection: [Errno 111] Connection refused'))
解决方案
1. 启动Ollama后台服务
注意:Ollama服务必须处于运行状态,LangChain才能通过11434端口调用其API
Nix仅将Ollama二进制文件加入环境,不会自动启动其后台API服务。在nix develop进入的shell中执行:
ollama serve
保持该终端窗口打开(或用ollama serve &让其后台运行),再打开新终端进入同一shell运行python c.py。
2. 预拉取所需模型
首次使用llama2模型需先拉取到本地,在shell中执行:
ollama pull llama2
拉取完成后再运行脚本即可正常调用模型。
3. 可选:Flake配置自动启动服务(交互式场景)
若希望进入devShell时自动启动Ollama服务,可修改Flake的mkShell部分,添加shellHook:
devShells.default = pkgs.mkShell { buildInputs = [ ollama Py ]; shellHook = '' # 启动Ollama服务并后台运行 ollama serve & # 可选:等待服务启动完成 sleep 2 ''; };
内容的提问来源于stack exchange,提问作者Pierre-olivier Gendraud
相关产品推荐
相关产品推荐

