带有外部 Python 库的 Odoo 自定义模块
Odoo custom module with external Python library
我使用 Python 库 ujson 在 Python 中创建了一个 Odoo 模块。
我使用 pip install ujson
.
在我的开发服务器上手动安装了这个库
现在我想在我的实时服务器上安装模块。我能以某种方式告诉 Odoo 模块在安装时安装 ujson 库吗?所以我只需要将模块添加到我的插件路径并通过 Odoo Web 界面安装它?
实现此自动化的另一个原因是如果我想共享我的自定义模块,这样其他人就不必在他们的服务器上手动安装该库。
有什么关于如何配置我的模块的建议吗?或者我应该只在我的模块中包含库的目录?
以下是在 report.py (odoo_root_folder/addons/report/models/report.py) 内的基本插件中的 odoo 基本模块 report 中用于安装 wkhtmltopdf 的代码。
from openerp.tools.misc import find_in_path
import subprocess
def _get_wkhtmltopdf_bin():
return find_in_path('wkhtmltopdf')
try:
process = subprocess.Popen([_get_wkhtmltopdf_bin(), '--version'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
except (OSError, IOError):
_logger.info('You need Wkhtmltopdf to print a pdf version of the reports.')
基本上,您需要找到一些 python 代码来 运行 库并安装它,并将该代码包含在你们其中一个 .py 文件中,这样就可以了。
您应该尝试导入除外以处理 odoo 服务器启动时的问题:
try:
from external_dependency import ClassA
except ImportError:
pass
对于您模块的其他用户,扩展模块清单中的 external_dependencies
(v9 及更低版本:__openerp__.py;v10+:__manifest__.py),这将提示警告安装:
"external_dependencies": {
'python': ['external_dependency']
},
非常感谢 Ivan 和他的 Blog
感谢@Walid Mashal 和@CZoellner 的帮助,你们都为我指出了正确的方向。
我现在通过将以下代码添加到我模块的 __init__.py 来解决这个任务:
import pip
try:
import ujson
except ImportError:
print('\n There was no such module named -ujson- installed')
print('xxxxxxxxxxxxxxxx installing ujson xxxxxxxxxxxxxx')
pip.main(['install', 'ujson'])
在python文件中使用下面的命令,你可以安装它(它只适用于odoo)。例如:这里我要安装xlsxwriter
try:
import xlsxwriter
except:
os.system("pip install xlsxwriter")
import xlsxwriter
我使用 Python 库 ujson 在 Python 中创建了一个 Odoo 模块。
我使用 pip install ujson
.
现在我想在我的实时服务器上安装模块。我能以某种方式告诉 Odoo 模块在安装时安装 ujson 库吗?所以我只需要将模块添加到我的插件路径并通过 Odoo Web 界面安装它?
实现此自动化的另一个原因是如果我想共享我的自定义模块,这样其他人就不必在他们的服务器上手动安装该库。
有什么关于如何配置我的模块的建议吗?或者我应该只在我的模块中包含库的目录?
以下是在 report.py (odoo_root_folder/addons/report/models/report.py) 内的基本插件中的 odoo 基本模块 report 中用于安装 wkhtmltopdf 的代码。
from openerp.tools.misc import find_in_path
import subprocess
def _get_wkhtmltopdf_bin():
return find_in_path('wkhtmltopdf')
try:
process = subprocess.Popen([_get_wkhtmltopdf_bin(), '--version'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
except (OSError, IOError):
_logger.info('You need Wkhtmltopdf to print a pdf version of the reports.')
基本上,您需要找到一些 python 代码来 运行 库并安装它,并将该代码包含在你们其中一个 .py 文件中,这样就可以了。
您应该尝试导入除外以处理 odoo 服务器启动时的问题:
try:
from external_dependency import ClassA
except ImportError:
pass
对于您模块的其他用户,扩展模块清单中的 external_dependencies
(v9 及更低版本:__openerp__.py;v10+:__manifest__.py),这将提示警告安装:
"external_dependencies": {
'python': ['external_dependency']
},
非常感谢 Ivan 和他的 Blog
感谢@Walid Mashal 和@CZoellner 的帮助,你们都为我指出了正确的方向。
我现在通过将以下代码添加到我模块的 __init__.py 来解决这个任务:
import pip
try:
import ujson
except ImportError:
print('\n There was no such module named -ujson- installed')
print('xxxxxxxxxxxxxxxx installing ujson xxxxxxxxxxxxxx')
pip.main(['install', 'ujson'])
在python文件中使用下面的命令,你可以安装它(它只适用于odoo)。例如:这里我要安装xlsxwriter
try:
import xlsxwriter
except:
os.system("pip install xlsxwriter")
import xlsxwriter