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

如何用conda将本地文件夹作为包安装?附相对导入问题及后续疑问

问题描述

核心问题

我会在「测试脚本(playground scripts)」中试验/测试自己编写的Python代码。通常不会保留这些测试脚本,但最近发现长期保存它们有价值,因此决定单独创建一个测试目录。

问题场景

已激活conda环境myproject,工作目录结构如下:

~/x
  __init__.py
  something.py

  ~/x/playground
    playscript.py

希望在playscript.py中导入something.py,并通过Jupyter以交互式窗口运行playscript.py。尝试相对导入something.py时失败,报错信息:

ImportError: attempted relative import with no known parent package

截至2024年6月,conda develop已被废弃,查阅资料后多人推荐使用命令:pip install --no-build-isolation --no-deps -e .

疑问

若修改~/x/something.py或新增模块,是否需要重新执行pip install --no-build-isolation --no-deps -e .?若需要,该方案并不理想。

解决方案

关于可编辑模式的更新问题

使用pip install --no-build-isolation --no-deps -e .(可编辑模式)后:

  • 修改现有模块(如something.py)的代码无需重新执行该命令,因为可编辑模式会将项目目录直接链接到conda环境的site-packages目录,代码修改会实时生效。
  • 仅当新增顶级模块文件(如在~/x下添加new_module.py)或修改项目配置文件(如pyproject.toml、setup.py)时,才需要重新执行该命令,让Python识别新增的模块结构。

其他替代方案

临时添加模块路径

在playscript.py开头加入以下代码,临时将上层目录加入Python的模块搜索路径:

import sys
from pathlib import Path
# 将上层目录(~/x)添加到模块搜索路径
sys.path.append(str(Path(__file__).parent.parent))

import something

这种方法无需安装包,修改代码后直接运行脚本即可生效,适合快速测试场景。

设置PYTHONPATH环境变量

激活conda环境后,执行以下命令临时设置环境变量:

export PYTHONPATH="$HOME/x:$PYTHONPATH"

之后运行Jupyter或脚本时,Python会自动搜索~/x目录下的模块,代码修改实时生效。若想永久生效,可将该命令添加到conda环境的激活脚本(如~/miniconda3/envs/myproject/etc/conda/activate.d/env_vars.sh)中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 01:23:13