zoukankan      html  css  js  c++  java
  • 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教程那本书时,就说过模块搜索路径的知识点,只是太久忘记了.......

  • 相关阅读:
    flex 弹性盒布局 移动端首页
    less+rem基础使用
    github 本地操作
    git 码云
    react基础知识
    css样式
    uni-app 知识点
    web app
    2019年一半已过,这些大前端技术你都GET了吗?- 下篇
    2019年大前端技术周刊-#31周
  • 原文地址:https://www.cnblogs.com/pluse/p/14284548.html
Copyright © 2011-2022 走看看