Python项目结构优化:解决lib模块导入失败问题
解决Python无法导入lib目录模块的问题
先明确你的项目结构(按描述整理):
项目根目录/ └── My-Fancy-Project-Name/ └── src/ ├── bin/ │ └── crawl_script.py # 你的可执行脚本 └── lib/ ├── __init__.py └── crawler_utils.py # 共享库模块
方法1:脚本内添加Python路径
在bin目录下的脚本开头加入以下代码,将src目录纳入Python模块搜索路径:
import sys from pathlib import Path # 定位到src目录 src_dir = Path(__file__).parent.parent sys.path.append(str(src_dir)) # 正常导入lib模块 from lib.crawler_utils import some_function
方法2:使用相对导入(需按包结构运行)
确保src、bin、lib目录下都存在空的__init__.py文件(标记为Python包),然后在脚本中用相对导入:
from ..lib.crawler_utils import some_function
注意这种方式必须从项目指定层级运行脚本,比如:
cd My-Fancy-Project-Name python -m src.bin.crawl_script
不能直接进入bin目录执行python crawl_script.py。
方法3:临时设置环境变量
运行脚本前,将src目录加入PYTHONPATH:
Linux/macOS
cd My-Fancy-Project-Name export PYTHONPATH=$(pwd)/src python src/bin/crawl_script.py
Windows(PowerShell)
cd My-Fancy-Project-Name $env:PYTHONPATH = "$(Get-Location)\src" python src/bin/crawl_script.py
该方式每次新开终端都需要重新设置,适合临时测试。
方法4:安装为可编辑包(推荐长期项目)
在My-Fancy-Project-Name目录下创建pyproject.toml文件:
[build-system] requires = ["setuptools>=61.0"] build-backend = "setuptools.build_meta" [project] name = "my-fancy-crawler" version = "0.1.0" packages = ["src.lib"] scripts = ["src/bin/crawl_script.py"]
然后执行命令将项目安装为可编辑模式:
pip install -e .
之后可在任意目录直接运行脚本,且代码修改会即时生效,适合长期维护的项目。
内容的提问来源于stack exchange,提问作者user2138149
相关产品推荐
相关产品推荐

