如何在Python中使用公共代码?
我现在在维护自己的两个应用程序。这两个应用程序有一些共同的地方,因此也有一些共享的代码。到目前为止,我只是把一个项目的模块复制到另一个项目里,但现在这样做变得越来越麻烦。我希望能把这些共同的代码放在一个地方,两个项目都可以引用。这样,对共同代码的任何修改都会在两个项目中生效。
我的问题是:我该怎么做呢?我需要把这些代码做成一个库吗?如果是的话,依赖这个库的项目该怎么使用它?我觉得我在这里有点困惑,因为这些共同的代码对其他人并没有什么用,或者说,我不想把它变成一个其他人可以使用的支持模块。
如果我的问题不清楚,请告诉我。
3 个回答
这是我会怎么做的:
先把你常用的项目打包成一个EGG档案:
~:zip common.egg common
然后把这个EGG文件放到你的库里:
cp common.egg PROJECT_PATH/lib/
在你的项目中:
import glob import os def main(): path_lib=os.path.abspath(os.path.split(os.path.abspath(sys.modules['__main__'].__file__))[0] + '/../lib') sys.path += glob.glob(path_lib + '/*.egg') from common import stuff stuff.doCommonStuff()
有很多方法可以让代码变得可重用,具体哪种方法最好其实取决于你的具体情况。把代码分成不同的包和模块是个不错的主意,这样相关的代码就能放在一起,方便从其他包和模块中重复使用。把代码放进模块里的类中,也能帮助把相关的代码归在一起。
我觉得,把一些常用的代码放到一个在你的PYTHONPATH里的模块或包中,这样两个应用程序都能用到,可能是最好的解决方案。
其实没什么特别复杂的事情,Python 只需要找到你的模块。这意味着你需要把你常用的模块放到 PYTHONPATH
里,或者把它们的位置添加到 sys.path
中。可以看看这里。
假设你有
~/python/project1
~/python/project2
~/python/libs/stuff.py
~/python/libs/other.py
你可以在你的操作系统环境中设置 PYTHONPATH='~/python/libs'
,或者你可以这样做
import sys, os
sys.path.append(os.path.expanduser('~/python/libs')) # or give the full path
之后你就可以在任何地方使用 import stuff, other
了。
你也可以把你的东西打包,这样你就需要一个像这样的结构:
~/python/project1
~/python/project2
~/python/libs/mylibname/__init__.py
~/python/libs/mylibname/stuff.py
~/python/libs/mylibname/other.py
~/python/libs/mylibname/__init__.py
这个文件必须存在,但它可以是一个空文件。这样就把 mylibname
变成了一个包。
在把 libs 文件夹按照上面的方式添加到你的路径后,你就可以使用 from mylibname import stuff, other
了。