如何组织Python包文件结构,实现开发时跳过src目录导入?
如何在开发时直接导入src目录下的Python包(无需每次安装)
你当前的Python包将核心代码放在src/子目录,构建wheel包正常,但开发时希望不用每次修改都本地安装,直接通过from mylib import foo导入,而非from mylib.src import foo,可以用以下几种方法解决:
方法1:使用pip可编辑安装(推荐)
这是Python包开发的标准做法,将包以可编辑模式安装后,Python会直接读取你开发目录中的代码,修改后无需重新安装。
在包含pyproject.toml的mylib/根目录下执行:
pip install -e .
执行完成后,你就能直接用from mylib import foo导入模块,完全符合需求。
方法2:手动添加Python模块搜索路径
如果不想通过pip安装,可直接将src/目录加入Python的模块搜索路径:
临时生效(仅当前会话)
在Python交互环境或测试脚本开头添加:
import sys sys.path.append("/绝对路径/to/mylib/src")
替换路径为你本地src目录的实际绝对路径。同时要确保src/__init__.py中已导出foo模块,比如添加from . import foo,之后就能直接from mylib import foo。
永久生效
通过设置PYTHONPATH环境变量实现:
- Linux/macOS:
终端临时生效:
永久生效则将上述命令添加到export PYTHONPATH="/绝对路径/to/mylib/src:$PYTHONPATH"~/.bashrc、~/.zshrc等shell配置文件中。 - Windows:
命令提示符临时生效:
永久生效需在系统环境变量中新增set PYTHONPATH=C:\绝对路径\to\mylib\src;%PYTHONPATH%PYTHONPATH,值设为C:\绝对路径\to\mylib\src。
方法3:确保pyproject.toml配置正确(配合可编辑安装)
如果使用setuptools作为构建后端,需在pyproject.toml中指定包的位置,确保pip install -e .能正确识别结构:
[build-system] requires = ["setuptools>=61.0"] build-backend = "setuptools.build_meta" [project] name = "mylib" version = "0.1.0" packages = ["mylib"] package_dir = {"mylib" = "src"}
这样配置后,构建工具会明确mylib包对应src/目录,不管是构建wheel还是开发时的可编辑安装,都能正确映射包结构。
内容的提问来源于stack exchange,提问作者Sven
相关产品推荐
相关产品推荐

