python import 踩坑指南 / sys.path失效解决方案

不关心故事背景的朋友们可以直接跳到“解决方案”~

文章目录

  • 故事背景
  • 历史方案
  • 解决方案

故事背景

最近在用thrift的时候遇到一个问题,thrift生成的python文件之间的引用都是相对引用的:

thrift_folder
├── base
│   ├── constants.py
│   ├── __init__.py
│   └── ttypes.py
├── model
│   ├── __init__.py
│   ├── constants.py
│   ├── ttypes.py

# model/ttypes.py
import base.ttypes

如果python起始运行文件路径不在thrift_folder内,那么引用就会有错误。

历史方案

老前辈们提供了两种解决方案

  • 修改所有的import
  • 修改os.path

前者的问题在于,即使用脚本在每个thrift前面写from thrift_folder import base(不能图省事先加一个__all__ = bulabula然后from thrift_folder import *,这样可能会循环引用),在thrift文件里面还是会藏着很多base.ttypes.XXX的鬼东西,需要一个个改……第一位老前辈就一个个改完了。当然可能他的thrift很少,我现在看着几十万行的thrift真的改不了= =

后者的问题在于os.path可能失效,这是为啥呢,请看下文分解——

解决方案

坑1:sys.path不能用append

在查找modul

你可能感兴趣的:(python,thrift,python,thrift,sys.path,sys.modules)