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教程那本書時,就說過模塊搜索路徑的知識點,只是太久忘記了.......


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM