我的项目包含三个Python应用程序。 应用1 是一款网络应用。 应用2 和 3 包含下载部分数据的脚本。
所有三个应用都需要使用包含"模型"的模块 Common 。 (保存到数据库的类)和常用设置。
我不知道如何构建这个项目。我可以创建三个目录,每个应用程序一个,并将 Common 三次复制到他们的目录中(似乎没有。)
想到的另一个想法是;创建一个主目录并将所有文件放在 Common 中,包括 __ init __。py 。然后,克里特三个子目录(子模块),每个应用程序一个。
另一种方法是使用pip安装 Common ,但这意味着每次我更改该模块中的某些内容时我都必须重新安装。
在之前的项目中,我使用的是.NET - 这个世界中的等价物将是一个包含四个项目的解决方案,其中一个是 Common 。
有什么建议吗?
答案 0 :(得分:6)
我有一个像这样设置的类似项目
project_root/
App1/
__init__.py
FlaskControlPanel/
app.py
static/
templates/
models/
__init__.py
mymodels.py
然后,我从project_root
运行所有内容。我有一个小脚本(批处理或shell,取决于我的环境)设置PYTHONPATH=.
以便导入正常工作。这样做是因为我通常使用PyCharm开发,其中导入"只是工作",但是当我部署最终产品时,路径与我在IDE中的路径不匹配。
将PYTHONPATH
设置为包含项目根目录中的所有内容后,即可进行标准导入。
例如,从我的FlaskControlPanel app.py
,我有这一行:
from models.mymodels import Model1, Model2, Model3
从App1 __init__.py
我有完全相同的导入声明:
from models.mymodels import Model1, Model2, Model3
当我在project_root
目录中时,我可以通过命令行(在Windows中)运行Flask应用程序来启动它:
setlocal
SET PYTHONPATH=.
python FlaskControlPanel\app.py
setlocal
用于确保仅为此会话修改PYTHONPATH
。
答案 1 :(得分:1)
我喜欢这种方法
projects/
__init__.py
project1/
__init__.py
project2/
__init__.py
lib1/
__init__.py
libfile.py
lib2/
__init__.py
所以,我需要进入项目文件夹。 要开始一个项目,请使用
python -m project_name
这使我可以轻松地从任何外部库导入,如
from lib1.libfile import [imoprt what you want]
或
from lib1 import libfile
答案 2 :(得分:0)
我会创建一个这样的结构:
project_root/
app1/
__init__.py
script.py
common/
__init__.py
models.py (all "common" models)
APP1 / script.py
import os, sys
# add parent directory to pythonpath
basepath = os.path.join(os.path.dirname(os.path.abspath(__file__)), '..')
if basepath not in sys.path:
sys.path.append(basepath)
from common.models VeryCommonModel
print VeryCommonModel
如果您不想在运行时设置python路径,请在运行脚本之前设置python路径:
$ export PYTHONPATH=$PYTHONPATH:/path/to/project_root
然后你可以这样做:
python app1/script.py
答案 3 :(得分:0)
从您的应用制作标准Python模块。我推荐像这样的结构:
apps/
common/
setup.py
common/
__init__.py
models.py
app1/
setup.py
app1/
__init__.py
models.py
project/
requirements.txt
app common的基本setup.py:
#!/usr/bin/env python
from setuptools import setup, find_packages
setup(
name='common',
version='1.0.0',
packages=find_packages(),
zip_safe=False,
)
为其他应用制作类似的setup.py。
在requirements.txt中为您的应用设置可编辑的“-e”选项:
-e apps/common
-e apps/app1
使用pip安装需求:
$ pip install -r requirements.txt
可编辑选项意味着源文件将链接到Python环境中。您的应用程序源文件的任何更改都将立即生效,无需重新安装。
现在,您可以在任何地方(在其他应用程序,项目文件中......)从常用应用程序(或任何其他应用程序)导入模型。