如何在setup.py中配置引入上层目录未安装的外部依赖到当前Python包
问题原因
- pip执行
pip install .时会默认创建独立的临时构建目录,构建过程的工作目录为该临时目录,而非你执行安装命令的/home/some_user/dev/package目录,因此直接写相对路径../package_external/package_external会指向临时目录的上层路径,自然找不到目标包目录。
解决方案
你可以基于setup.py本身的文件路径,将相对路径转换为绝对路径,不受构建工作目录影响,修改后的setup.py配置如下:
import os from setuptools import setup # 获取当前setup.py所在目录的绝对路径 ROOT_DIR = os.path.abspath(os.path.dirname(__file__)) setup(name='package', # ... package_dir={ 'package_external': os.path.join(ROOT_DIR, '../package_external/package_external'), }, packages=['package', 'package_external'] # ... )
额外说明
- 该方案完全兼容你现有的部署环境,所有部署机器的路径结构一致的前提下,不需要修改任何配置即可正常安装
- 如果你后续不希望将
package_external的代码打包进package的安装包,也可以选择在package的__init__.py中动态添加package_external的父路径到sys.path,示例如下:
import os import sys sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '../../package_external')))
内容的提问来源于stack exchange,提问作者abrzozowski
相关产品推荐
相关产品推荐

