Python导入路径含特殊字符的包

 

背景如下:

  github上找的一个 Python 版开源库 SDK 不满足需求,copy 了该 SDK 进行修改并将该库保存在公司内部的git服务器上供小组人员使用。除了该 Python 版 SDK 之外,还修改了一份公司内部提供的 Golang 版本 SDK,两个语言版本的 SDK 放在一个仓库 groups 下。因此,为了区分版本,分别使用"XXX-go"和"XXX-python"目录来进行存储。

 

  Python版本仓库目录大致如下:

├── xxx-python
| └── yyy

|    ├── bar.py
|    ├── foo.py
|    └── __init__.py
└── task.py


xxx-python仓库目录下有yyy目录,yyy目录是从github上copy的 SDK,与xxx-python仓库目录同path下,有个task.py的脚本需要导入yyy SDK,大致代码如下:

import yyy

yyy.client()
...


这里有个问题是,在task下面不能直接导入yyy包,因为yyy目录是在xxx-python目录下的,因此需要把xxx-python作为yyy包的父级包进行导入,要么就把task.py文件移入到xxx-python目录下。
由于task.py在使用yyy SDK时,该SDK总是自动缓存一些snapshot,会创建目录,不想在xxx-python中总是出现这个snapshot目录,也不想修改仓库的.gitignore文件。
那只能作为父级包导入xxx-python,但是xxx-python含有特殊字符,没法作为包名导入。

解决办法:

import sys
sys.path.append('xxx-python')

import yyy
yyy.client()

在Python的模块搜索路径中手动追加该包含特殊字符的文件夹路径,然后再导入实际的SDK包,让Python解释器能够尝试在xxx-python下查找包。

 

这个问题,下午困惑了我两个小时没解决,晚上在stackoverflow找到了答案,然后作了纪录,写下了这篇blog,但是写完我才想起,这是Python基础知识,很久以前读Python教程那本书时,就说过模块搜索路径的知识点,只是太久忘记了.......

posted @ 2021-01-15 22:31  impluse  阅读(2142)  评论(0编辑  收藏  举报