设置指南¶
根据预期的用例,有多种安装 Odoo 的方法。对于 Odoo 社区的开发人员和 Odoo 员工来说,首选方法是执行源安装 (running Odoo from the source code)。
重要
按照贡献指南的 环境设置 部分准备您的环境,以便将本地更改推送到 Odoo 存储库。
适应教程的环境¶
到目前为止,您应该已将源代码下载到两个本地存储库中,一个用于 odoo/odoo,另一个用于 odoo/enterprise。这些存储库旨在将更改推送到 GitHub 上的预定义分支。当您开始为代码库做出贡献时,这将被证明是很方便的,但在遵循教程的范围内,我们希望避免培训材料污染它们。然后,让我们将您的更改推送到第三个存储库:odoo/tutorials。与前两个存储库一样,它将成为 addons-path 的一部分,引用包含 Odoo 模块的所有目录。
注解
根据您正在学习的教程,您可能不需要安装此存储库包含的所有模块。
按照与
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 员工:
请务必仔细阅读:ref:
contributing/development/first-contribution。特别是,您的分支机构名称必须遵循我们的约定。将第一个更改推送到 odoo-dev 上的共享分叉后,创建一个 PR。请将您的四边形放在 PR 标题中(例如“abcd - 技术培训”)。
这将使您能够分享您即将进行的工作并接收教练的反馈。为了确保持续的反馈循环,我们建议您在完成本教程的一章后立即推送新的提交。请注意,PR 会根据您推送到 odoo-dev 的提交自动更新,您无需打开多个 PR。
在 Odoo,我们广泛使用 Runbot 进行 CI 测试。当您将更改推送到 odoo-dev 时,Runbot 会创建一个新的构建并测试您的代码。登录后,您将能够看到您的分支机构 Tutorials project。
注解
文件系统上存储库的具体位置并不重要。但是,为了简单起见,我们假设您已将所有存储库克隆到同一目录下。如果情况并非如此,请确保相应地调整以下命令,提供从 odoo/odoo 存储库到 odoo/tutorials 存储库的适当相对路径。
运行服务器¶
使用 odoo-bin 启动¶
一旦设置了所有依赖项,就可以通过运行服务器的命令行界面 odoo-bin 来启动 Odoo。
$ cd $HOME/src/odoo/
$ ./odoo-bin --addons-path="addons/,../enterprise/,../tutorials" -d rd-demo
您可以使用多个 command-line arguments 来运行服务器。在本次培训中,您只需要其中的一些。
- -d <database>¶
将要使用的数据库。
- --addons-path <directories>¶
存储模块的目录的逗号分隔列表。扫描这些目录中的模块。
- --limit-time-cpu <limit>¶
防止工作线程对每个请求使用超过 <limit> CPU 秒。
- --limit-time-real <limit>¶
防止工作线程处理请求的时间超过 <limit> 秒。
小技巧
--limit-time-cpu和--limit-time-real参数可用于防止在调试源代码时工作线程被杀死。- 您可能会遇到类似于
AttributeError: module '<MODULE_NAME>' has no attribute '<$ATTRIBUTE'>的错误。在这种情况下,您可能需要使用:command:`$ 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
启用开发者模式¶
开发人员或调试模式对于培训很有用,因为它可以访问其他(高级)工具。现在:ref:Enable the developer mode <developer-mode>。选择您喜欢的方法;它们都是等价的。
额外的工具¶
有用的 Git 命令¶
以下是一些对您的日常工作有用的 Git 命令。
- 切换分支:当您切换分支时,两个存储库(odoo 和 enterprise)必须同步,即两者需要位于同一分支中。
$ cd $HOME/src/odoo $ git switch 19.0 $ cd $HOME/src/enterprise $ git switch 19.0
获取并变基:
$ cd $HOME/src/odoo $ git fetch --all --prune $ git rebase --autostash odoo/19.0 $ cd $HOME/src/enterprise $ git fetch --all --prune $ git rebase --autostash enterprise/19.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,您可以找到 configuration file example here。
PostgreSQL 管理员工具¶
您可以使用前面演示的命令行或使用 GUI 应用程序(例如 pgAdmin 或 DBeaver)来管理 PostgreSQL 数据库。
要将 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模块可以很好地打印expression的值。
- w(here)¶
打印堆栈跟踪,最新帧位于底部。
- d(own)¶
将当前帧在堆栈跟踪中向下移动一级(到较新的帧)。
- u(p)¶
将当前帧在堆栈跟踪中向上移动一级(到较旧的帧)。
- n(ext)¶
继续执行,直到到达当前函数的下一行或返回。
- c(ontinue)¶
继续执行,只有遇到断点时才停止。
- s(tep)¶
执行当前行。在第一个可能的场合停止(在被调用的函数中或在当前函数的下一行中)。
- q(uit)¶
退出调试器。正在执行的程序被中止。