Python开发:如何从当前包内部导入外部其他包?
解决Python包内导入平行外部包的问题
以下是几个实用的解决方法,按推荐程度排序:
1. 安装为可编辑包(最规范,长期开发首选)
这种方法能让Python全局识别你的项目结构,不管在哪个子包内都能直接导入其他平行包:
- 在项目根目录下创建
setup.py文件,内容如下:from setuptools import setup, find_packages setup( name="your_project_name", version="0.1", packages=find_packages(), ) - 打开终端,进入项目根目录,运行命令:
pip install -e .
之后在任何子包文件里,直接用import package_b或者from package_b import xxx就能导入目标包了。
2. 手动添加项目根目录到Python路径
如果不想配置setup.py,可以在需要导入的文件开头添加代码,把项目根目录加入Python的模块查找路径:
import sys from pathlib import Path # 假设当前文件在目标包的同级子包内,根目录是它的上两级目录 root_path = Path(__file__).parent.parent sys.path.append(str(root_path)) # 现在可以正常导入了 import package_b from package_b import target_module
注:os.chdir()只是修改当前工作目录,不会改变Python查找模块的路径列表(sys.path),所以没用。
3. 相对导入(仅限特定场景)
如果你的整个项目本身是一个大的包(根目录下有__init__.py),且不会直接运行子包内的文件,可以用相对导入:
from .. import package_b
注意:直接运行使用相对导入的文件会报错,因为此时Python不会把它当作包的一部分处理,这种方法适合项目作为整体被外部程序调用的场景。
内容的提问来源于stack exchange,提问作者NoName
相关产品推荐
相关产品推荐

