Setup guide

根据预期的使用情况,有多种安装Odoo的方法。对于Odoo社区的开发人员和Odoo员工来说,首选的方法是执行源代码安装(从源代码运行Odoo)。

重要

按照贡献指南中的 环境设置 部分准备您的环境,以便将本地更改推送到 Odoo 仓库。

调整环境以适应教程

到目前为止,您应该已经将源代码下载到两个本地仓库中,一个用于 odoo/odoo,另一个用于 odoo/enterprise。这些仓库已设置为将更改推送到 GitHub 上预定义的分支。当您开始为代码库做出贡献时,这将非常方便,但在遵循教程的范围内,我们希望避免用培训材料污染它们。因此,让我们将您的更改推送到第三个仓库:odoo/tutorials。与前两个仓库一样,它将成为 addons-path 的一部分,该路径引用包含 Odoo 模块的所有目录。

注解

根据您所遵循的教程,您可能不需要安装此仓库中包含的所有模块。

  1. 按照与 odoo/odooodoo/enterprise 仓库相同的流程,使用以下命令在您的机器上克隆 odoo/tutorials 仓库:

    $ git clone git@github.com:odoo/tutorials.git
    
  2. 配置你的 fork 和 Git,以便将更改推送到你的 fork 而不是主代码库。如果你在 Odoo 工作,请配置 Git 将更改推送到在账户 odoo-dev 上创建的共享 fork。

    1. 访问 github.com/odoo/tutorials 并点击 Fork 按钮,在你的账户上创建该仓库的分支。

    2. 在下面的命令中,将 <your_github_account> 替换为你创建分叉的 GitHub 账户名称。

      $ cd /TutorialsPath
      $ git remote add dev git@github.com:<your_github_account>/tutorials.git
      

就是这样!您的环境现在已经准备好从源代码运行Odoo,并且您已经成功创建了一个用作插件目录的存储库。这将允许您将您的工作推送到GitHub。

重要

仅限 Odoo 员工:

  1. 请务必仔细阅读 进行你的第一次贡献。特别是,您的分支名称必须遵循我们的命名规范。

  2. 一旦你将第一次更改推送到 odoo-dev 上的共享分支,创建一个 PR。请在 PR 标题中加上你的四字码(例如,”abcd - 技术培训”)。

    这将使您能够分享即将进行的工作并从教练那里获得反馈。为了确保持续的反馈循环,我们建议在完成教程的每一章后立即推送一个新的提交。请注意,PR 会自动更新您推送到 odoo-dev 的提交,您不需要打开多个 PR。

  3. 在 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>

限制每个请求的工作进程使用不超过<limit> CPU秒。

--limit-time-real <limit>

防止工作进程在处理请求时超过<limit>秒。

小技巧

  • The --limit-time-cpu and --limit-time-real arguments can be used to prevent the worker from being killed when debugging the source code.

  • 您可能会遇到类似的错误 AttributeError: module '<MODULE_NAME>' has no attribute '<$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
    
  • 其他常用的参数包括:

    • -i: 在运行服务器之前安装一些模块(以逗号分隔的列表)。这相当于在用户界面中进入 应用,然后从那里安装模块。

    • -u: 在运行服务器之前更新某些模块(以逗号分隔的列表)。这相当于在用户界面中进入 应用,选择一个模块,然后从那里进行升级。

登录Odoo

打开 http://localhost:8069/ 在你的浏览器上。我们推荐使用 Chrome <https://www.google.com/intl/en/chrome/> _, Firefox <https://www.mozilla.org/firefox/new/> _,或者任何其他带有开发工具的浏览器。

要登录管理员用户,请使用以下凭据:

  • email: admin

  • password: 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 <https://code.visualstudio.com> _, VSCodium <https://vscodium.com> _(开源的等效品), PyCharm <https://www.jetbrains.com/pycharm/download/#section=linux> _,或者 Sublime Text <https://www.sublimetext.com> _。然而,你可以自由选择你喜欢的编辑器。

配置您的 Linter 是非常重要的。使用 Linter 可以帮助您显示语法和语义警告或错误。Odoo 源代码尽力遵守 Python 和 JavaScript 的标准,但有些标准可以忽略。

对于Python,我们使用PEP8,忽略这些选项:

  • E501: line too long

  • E301: expected 1 blank line, found 0

  • E302: expected 2 blank lines, found 1

对于JavaScript,我们使用ESLint,你可以在这里找到一个 配置文件示例

PostgreSQL的管理员工具

你可以使用命令行来管理你的PostgreSQL数据库,就像之前演示的那样,或者使用图形用户界面应用程序,比如 pgAdmin 或者 DBeaver

我们建议您使用Unix套接字连接来连接GUI应用程序和数据库。

  • 主机名/地址: /var/run/postgresql

  • 端口: 5432

  • 用户名: $USER

Python调试

当面对错误或者试图理解代码运行时,简单地打印输出可以解决很多问题,但是一个合适的调试器可以节省很多时间。

你可以使用经典的 Python 库调试器(pdbpudbipdb),也可以使用编辑器的调试器。

在下面的例子中,我们使用ipdb,但使用其他库的过程类似。

  1. 安装库:

    pip install ipdb
    
  2. 放置触发器(断点):

    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)

退出调试器。正在执行的程序被中止。