Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中使用公共代码?_Python_Module - Fatal编程技术网

如何在python中使用公共代码?

如何在python中使用公共代码?,python,module,Python,Module,我目前正在维护我自己的两个应用程序。它们都有一些共同的方面,因此也共享一些代码。到目前为止,我只是将模块从一个项目复制到另一个项目,但现在它变成了一个维护问题。我更希望在两个项目之外的一个地方有公共代码,它们都可以导入。然后,对公共代码的任何更改都将反映在两个项目中 我的问题是:我该怎么做?我是否使用此代码创建库?如果是,依赖项目如何使用库?我认为我在这里遇到的一件事是,通用代码对其他任何人都没有真正的用处,或者至少,我不想让它成为其他人可以使用的受支持的模块 如果我的问题不清楚,请让我知道。您

我目前正在维护我自己的两个应用程序。它们都有一些共同的方面,因此也共享一些代码。到目前为止,我只是将模块从一个项目复制到另一个项目,但现在它变成了一个维护问题。我更希望在两个项目之外的一个地方有公共代码,它们都可以导入。然后,对公共代码的任何更改都将反映在两个项目中

我的问题是:我该怎么做?我是否使用此代码创建库?如果是,依赖项目如何使用库?我认为我在这里遇到的一件事是,通用代码对其他任何人都没有真正的用处,或者至少,我不想让它成为其他人可以使用的受支持的模块


如果我的问题不清楚,请让我知道。

您没有什么特别的事情要做,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
之后,您可以在任何地方执行
导入内容和其他

你也可以打包你的东西,然后你需要这样的布局:

~/python/project1
~/python/project2
~/python/libs/mylibname/__init__.py
~/python/libs/mylibname/stuff.py
~/python/libs/mylibname/other.py
~/python/libs/mylibname/\uuuu init\uuuu.py
必须存在,但它可以是空文件。它将
mylibname
转换为一个


在如上所述将libs文件夹添加到您的路径后,您可以从mylibname导入stuff执行
,其他

有很多方法可以将代码分解为可重用代码。这真的取决于你的具体情况,因为什么是最有效的。将代码分解成单独的包和模块始终是一个好主意,这样相关的代码就可以捆绑在一起,并且可以从其他包和模块中重用。将代码分解为模块内的类也有助于将相关代码分组在一起


我想说的是,将通用代码放入PYTHONPATH上的模块或包中,并可供这两个应用程序使用,这可能是最好的解决方案。

我将这样做:

  • 为您的公共项目制作一个鸡蛋档案:

    ~: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()
    

听起来很简单。所以,我在磁盘上的项目是这样的:-项目-project1-project2-Common所以“Common”会出现在
PYTHONPATH
?这是否意味着setup.py还需要设置
PYTHONPATH
?最后,我可以称之为什么公共代码?我担心
导入的东西很普通。有些东西
信息量不大。也许我在担心一些小事。