2017-05-19 149 views
0

我在Python中攀登我的学习曲线,并试图理解将所有东西放在哪里。Python:在两个模块之间共享模型代码

我原本在一个文件夹中有一个python模块,然后是一个子文件夹src,在这个src文件夹中我将会有我的主要源文件说main.py然后我将有模型文件夹存储我的模型代码。

/myproject/src/main.py 
/myproject/src/models/a-model.py 
/myproject/src/models/b-model.py 

所以我主要将导入模型是这样的:

from models.a-model import a 

然后,当我打包压缩文件我只是压缩与文件夹结构的myproject文件夹和部署,一切都很好。

现在我有另一个新的模块做不同的事情,但需要使用相同的模型。

我可以很容易地复制它们并单独编码和部署。但是我想将这些代码分享给模型,这样当一个模型发生变化时,我只需要更新一次,而不是两个地方。

我的新模块就像

/mynew/src/main-b.py 
/mynew/src/models/a-model.py 
/mynew/src/models/b-model.py 

什么是做到这一点的最佳做法?

我会这样吗?

/myproject/src/main.py 
/mynew/src/main-b.py 
/models/a-model.py 
/models/b-model.py 

然后更新导入?

但我怀疑我该如何部署?我是否也必须设置相同的文件夹结构?

+0

将包含'models'包的目录路径添加到运行任一项目代码的环境的'PYTHONPATH'变量中。然后'from models import ...'会找到它们。 – schwobaseggl

+0

@StevenYong你使用Pydev作为你的IDE吗? – direprobs

+0

否@direprobs,为什么? –

回答

1

可以将/myproject/src/models添加到环境变量PYTHONPATH。 Python将PYTHONPATH环境变量中列出的目录添加到sys.path,这是Python在您尝试导入内容时搜索的目录列表。这是不好,,因为修改PYTHONPATH有其自身的副作用,幸运的是,虚拟环境提供了一种方法来解决这些副作用。

或者和更好的,你可以添加模块来site-packages目录,site-packages添加到sys.path中by default, this obviates the need to modify PYTHONPATH . To locate the站点packages`目录,指的是从Python文档此页:Installing Python Modules (Legacy version)

您也可以使用LiClipse IDE,其中已安装PydevCreate source a folder from the IDE并将您之前的项目与您的较新项目关联。当您链接项目时,IDE会将旧项目的源文件夹添加到新项目的PYTHONPATH,因此Python将能够找到您的模块。