最近碰到了一个头疼的关于项目import的问题, 由于是同一个人开发的项目, 目录结构很相似
A
----src
--utils
----logs
----scripts
B
----src
--utils
----logs
----scripts
上面是两个目录, 都具有相同的目录结构, 每个人在自己的项目里都这么使用 import utils.time_util.func,
然后把自己项目的src目录加入PYTHONPATH,
这样的结果就是你在不知不觉中使用了别的项目的package, 如果别人修改了time_util.func, 那么就会出现不可预料的结果.
想了一下解决办法大致有以下几个:
1. 将公用的一些utils单独建立项目, 每个项目需要使用的时候checkout.
优点: 只需要维护一份公共的通用utils
缺点: 还是无法解决需要单独定制的utils
2.将项目目录顶级的父目录加入PYTHONPATH, 比如上面加入的不是A/src, 而是A/../
优点: 不会出现混乱
缺点: 每个都要如下使用 from A.src.utils.time_util import func, 导入路径太复杂.
3. 不使用PYTHONPATH, 项目文件都通过sys.path.append方式, 将项目的src目录加入, 然后再import包.
优点: 方便定制, 不会混乱
缺点: 多级目录sys.path.append不现实
目前还没想到有更好的方法, 还要去借鉴一下再继续更新.
update:
最近好像发现了一个virtualenv的东西可以实现这个 , 好好研究下