设置指南¶
根据预期用途的不同,安装 Odoo 有多种方式。对于 Odoo 社区开发者和 Odoo 员工来说,首选的方式是从源代码安装(从源代码运行 Odoo)。
重要
请遵循贡献指南中的 环境设置 部分,为将本地更改推送到 Odoo 仓库准备环境。
为教程调整环境¶
到目前为止,您应该已经将源代码下载到两个本地仓库中,一个用于 odoo/odoo
,另一个用于 odoo/enterprise
。这些仓库已配置为将更改推送到 GitHub 上预定义的分支。当您开始为代码库做贡献时,这会很方便,但在学习教程的过程中,我们希望避免用培训材料污染它们。因此,请将您的更改推送到第三个仓库:odoo/tutorials
。与前两个仓库一样,它将成为引用所有包含 Odoo 模块目录的 addons-path
的一部分。
注解
根据您正在学习的教程,您可能不需要安装该仓库中包含的所有模块。
按照与
odoo/odoo
和odoo/enterprise
仓库相同的过程,在您的机器上克隆odoo/tutorials
仓库:$ git clone git@github.com:odoo/tutorials.git
配置您的分支和 Git,以便将更改推送到您的分支,而不是主代码库。如果您在 Odoo 工作,请配置 Git 将更改推送到 odoo-dev 账户上创建的共享分支。
访问 github.com/odoo/tutorials 并点击 Fork 按钮,以在您的账户上创建该仓库的分支。
在下面的命令中,将
<your_github_account>
替换为 GitHub 账户的名称。$ cd /TutorialsPath $ git remote add dev git@github.com:<your_github_account>/tutorials.git
$ cd /tutorials $ git remote add dev git@github.com:odoo-dev/tutorials.git $ git remote set-url --push origin you_should_not_push_on_this_repository
完成了!您的环境现在已经准备好从源代码运行 Odoo,并且您已经成功创建了一个用作插件目录的仓库。这将允许您将工作推送到 GitHub。
重要
仅适用于 Odoo 员工:
请务必仔细阅读 进行您的第一次贡献 。特别是,您的分支名称必须遵循我们的命名约定。
一旦您将第一次更改推送到 odoo-dev 上的共享分支,请创建一个 PR(拉取请求)。请在 PR 标题中加上您的四位字母代码(例如,“abcd - 技术培训”)。
这将使您能够分享即将完成的工作并接收教练的反馈。为了确保持续的反馈循环,我们建议您在完成教程的一个章节后立即推送新的提交。请注意,PR 会自动更新为您推送到 odoo-dev 的提交,您无需打开多个 PR。
在 Odoo,我们广泛使用 Runbot 进行 CI(持续集成) 测试。当您将更改推送到 odoo-dev 时,Runbot 会创建一个新的构建并测试您的代码。登录后,您将能够在 教程项目 中看到您的分支。
注解
仓库在文件系统中的具体位置并不重要。然而,为了简单起见,我们假设您已将所有仓库克隆到同一目录下。如果不是这样,请确保根据情况调整以下命令,提供从 odoo/odoo
仓库到 odoo/tutorials
仓库的适当相对路径。
运行服务器¶
使用 odoo-bin
启动¶
一旦所有依赖项都已设置好,可以通过运行 odoo-bin
(服务器的命令行接口)来启动 Odoo。
$ cd $HOME/src/odoo/
$ ./odoo-bin --addons-path="addons/,../enterprise/,../tutorials" -d rd-demo
您可以使用多个 命令行参数 来运行服务器。在本培训中,您只需要其中的一部分。
- -d <database>¶
将要使用的数据库。
- --addons-path <directories>¶
存储模块的目录列表,以逗号分隔。这些目录会被扫描以查找模块。
- --limit-time-cpu <limit>¶
防止工作进程在每个请求中使用超过 <限制> 的 CPU 秒数。
- --limit-time-real <limit>¶
防止工作进程处理请求的时间超过 <限制> 秒。
小技巧
--limit-time-cpu
和--limit-time-real
参数可用于防止在调试源代码时工作进程被终止。- 您可能会遇到类似
AttributeError: 模块 '<MODULE_NAME>' 没有属性 '<$ATTRIBUTE'>
的错误。在这种情况下,您可能需要使用 $ pip install --upgrade --force-reinstall <MODULE_NAME> 重新安装该模块。如果此错误涉及多个模块,您可能需要使用 $ pip install --upgrade --force-reinstall -r requirements.txt 重新安装所有依赖项。您还可以清除 Python 缓存来解决此问题:$ cd $HOME/.local/lib/python3.8/site-packages/ $ find -name '*.pyc' -type f -delete
其他常用的参数包括:
登录到 Odoo¶
在浏览器中打开 http://localhost:8069/。我们建议使用 Chrome、Firefox 或其他带有开发工具的浏览器。
要以管理员用户身份登录,请使用以下凭据:
电子邮件:
admin
密码:
admin
启用开发者模式¶
开发者或调试模式对于培训非常有用,因为它可以访问额外(高级)工具。现在 启用开发者模式 。选择您喜欢的方法;它们都是等效的。
额外工具¶
有用的 Git 命令¶
以下是一些对日常工作有帮助的 Git 命令。
- 切换分支:当您切换分支时,两个仓库(odoo 和 enterprise)必须同步,即两者需要处于同一分支。
$ cd $HOME/src/odoo $ git switch 18.0 $ cd $HOME/src/enterprise $ git switch 18.0
获取并重新设置基准:
$ cd $HOME/src/odoo $ git fetch --all --prune $ git rebase --autostash odoo/18.0 $ cd $HOME/src/enterprise $ git fetch --all --prune $ git rebase --autostash enterprise/18.0
代码编辑器¶
如果您在 Odoo 工作,您的许多同事都在使用 VSCode、VSCodium <https://vscodium.com>`_(开源等效版本)、`PyCharm 或 Sublime Text。不过,您可以自由选择自己喜欢的编辑器。
正确配置您的 linter 非常重要。使用 linter 可以帮助您显示语法和语义警告或错误。Odoo 源代码尽量遵循 Python 和 JavaScript 的标准,但其中一些可以忽略。
对于 Python,我们使用 PEP8,但忽略以下选项:
E501
:行过长E301
:期望 1 行空行,发现 0 行E302
:期望 2 行空行,发现 1 行
对于 JavaScript,我们使用 ESLint,您可以在此处找到 配置文件示例。
PostgreSQL 管理工具¶
您可以使用前面演示的命令行管理 PostgreSQL 数据库,也可以使用 GUI 应用程序,例如 pgAdmin 或 DBeaver。
为了将 GUI 应用程序连接到您的数据库,我们建议您使用 Unix 套接字进行连接。
主机名/地址:
/var/run/postgresql
端口:
5432
用户名:
$USER
Python 调试¶
在面对错误或试图理解代码如何工作时,简单地打印输出信息可能会很有帮助,但一个合适的调试器可以节省大量时间。
您可以使用经典的 Python 库调试器(pdb、pudb 或 ipdb),或者使用您的编辑器的调试器。
在以下示例中我们使用 ipdb,但其他库的过程类似。
安装库:
pip install ipdb
放置触发器(断点):
import ipdb; ipdb.set_trace()
Example
def copy(self, default=None): import ipdb; ipdb.set_trace() self.ensure_one() chosen_name = default.get('name') if default else '' new_name = chosen_name or _('%s (copy)') % self.name default = dict(default or {}, name=new_name) return super(Partner, self).copy(default)
以下是一些命令列表:
- h(elp) [command]¶
如果没有提供参数,则打印可用命令列表。如果提供了命令作为参数,则打印该命令的帮助信息。
- pp expression¶
表达式
的值将通过pprint
模块进行美化打印。
- w(here)¶
打印堆栈跟踪,最近的帧位于底部。
- d(own)¶
在堆栈跟踪中将当前帧向下移动一级(到较新的帧)。
- u(p)¶
在堆栈跟踪中将当前帧向上移动一级(到较旧的帧)。
- n(ext)¶
继续执行,直到到达当前函数的下一行或返回。
- c(ontinue)¶
继续执行,并仅在遇到断点时停止。
- s(tep)¶
执行当前行。在第一个可能的机会停止(要么是在调用的函数中,要么是在当前函数的下一行)。
- q(uit)¶
退出调试器。正在执行的程序将被终止。