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

NixOS下Python开发与调试环境搭建求助

NixOS下Python开发环境搭建求助与解决方案

背景

从Arch切换到NixOS,使用稳定频道+home-manager,暂未尝试flakes。Python环境搭建是完成系统迁移的最大阻碍。此前在Arch中用conda管理开发环境,环境就绪后通过pdm锁定依赖并在服务器复现。

遇到的问题

  • 配置conda-shell后,无法将conda环境设置为PyCharm/VSCode的Python解释器(调试需指定conda路径),选择~/.conda/bin/conda时触发错误:Cannot run program "~/.conda/bin/conda": error =2, No such file or directory
  • 临时用nix-shell搭配pdm安装依赖时,Python路径无法识别已安装的包,调试功能失效,且每次安装新包都需重复操作,流程繁琐

已尝试的方案

  • conda-shell
  • virtualenv(指向nix/store)
  • pdm(创建venv时指向nix/store)
  • nix-shell临时 workaround(无法调试)

解决方案

核心思路:放弃conda与Nix混用,完全基于Nix生态构建环境

Nix的沙箱机制与conda的路径管理存在本质冲突,混用会导致编辑器路径识别异常,建议用Nix的环境隔离能力替代conda。

1. 项目专属环境:用shell.nix定义依赖

为每个项目编写shell.nix,直接指定Python版本及所需依赖,示例:

{ pkgs ? import <nixpkgs> {} }:
pkgs.mkShell {
  buildInputs = with pkgs; [
    python311
    python311Packages.pandas
    python311Packages.requests
    python311Packages.debugpy  # 用于编辑器调试
  ];
}

执行nix-shell进入环境后,VSCode/PyCharm会自动识别当前shell中的Python解释器(路径一般为/nix/store/xxx-python3-3.11.x/bin/python),调试功能可正常使用。

2. 配合direnv自动激活环境

安装direnv并通过home-manager配置,在项目目录添加.envrc文件,内容为use nix,进入项目时会自动加载nix-shell环境,无需手动执行命令,编辑器能实时识别正确的Python路径。

3. 迁移pdm依赖到Nix

用pdm2nix将现有pdm的pyproject.toml和pdm.lock转换为Nix表达式,实现依赖精确锁定:

  • 安装工具:nix-env -iA nixpkgs.pdm2nix
  • 项目目录执行:pdm2nix,生成pdm-packages.nix
  • 修改shell.nix引入依赖:
{ pkgs ? import <nixpkgs> {} }:
let
  pdmDeps = import ./pdm-packages.nix { inherit pkgs; };
in pkgs.mkShell {
  buildInputs = [
    pdmDeps.python
    pdmDeps.packages
    pdmDeps.devPackages
    pkgs.python311Packages.debugpy
  ];
}

4. 全局Python环境(可选)

若需全局可用的Python环境,可通过home-manager配置:

programs.home-manager.enable = true;
home.packages = with pkgs; [
  python311
  python311Packages.pip
  python311Packages.pandas
];

但更推荐项目级隔离环境,避免版本冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 18:22:49