第二章:開發環境設置?
根據使用場景的不同,有多種安裝Odoo的方法。本教程將采用 源碼安裝 ( 從源代碼運行Odoo ),這是最適合Odoo開發人員的方式。
在本文檔中,我們假設您正在安裝開發環境,使用由Odoo提供的已安裝并更新的Linux Mint筆記本電腦。如果不是這種情況,請在安裝指南的任何部分中選擇 Windows 或 Mac OS 選項卡,具體取決于您使用的操作系統。步驟基本相同。
設置Git?
安裝并配置Git?
安裝過程的第一步是安裝 Git 版本控制系統,因為 Odoo 源代碼是在 GitHub 上管理的。
$ sudo apt install git
小技巧
檢查 Git 是否已安裝,使用以下命令嘗試打印 Git 的版本:
$ git --version
安裝完成后,請注冊您的姓名和電子郵件:
$ git config --global user.name "Your full name (trigram)"
$ git config --global user.email "xyz@odoo.com"
配置GitHub?
您需要一個 GitHub 賬戶來獲取源代碼并為 Odoo 的開發做出貢獻。如果您還沒有賬戶,請創建一個。對于用戶名,我們建議使用您的三字代碼 “xyz”(或四字代碼)后跟 ‘-odoo’:’xyz-odoo’。
與 GitHub 進行身份驗證的最簡單方法是使用 SSH 連接。使用 SSH 身份驗證可讓您連接到 GitHub,而無需每次輸入命令時提供用戶名和密碼。
注解
下面的逐步操作基于 官方 GitHub 文檔。
生成一個新的SSH密鑰,將其添加到ssh-agent中,并將SSH密鑰復制到剪貼板。
$ ssh-keygen -t ed25519 -C "xyz@odoo.com" $ ssh-add ~/.ssh/id_ed25519 $ sudo apt install xclip $ xclip -sel clip < ~/.ssh/id_ed25519.pub
前往 GitHub.com,然后點擊頁面右上角的個人頭像,再點擊 Settings 。
在用戶設置側邊欄中,點擊 SSH 和 GPG 密鑰 。
點擊 新建SSH密鑰 或者 添加SSH密鑰 。
在 Title 字段中,添加一個新鍵的描述性標簽。
將您的密鑰粘貼到 密鑰 字段中。
點擊 添加SSH密鑰 。
獲取源代碼?
現在是獲取Odoo源代碼的時候了。首先,讓我們在 $HOME/src/
中創建一個Git倉庫的主目錄。
$ mkdir -p $HOME/src
$ cd $HOME/src
然后,按照 安裝Odoo指南 中所述,使用SSH克隆這兩個倉庫。
小技巧
克隆存儲庫需要一些時間,請在等待時享受一杯咖啡。
配置 Git 倉庫?
要為Odoo存儲庫做出貢獻,您首先需要 fork它,然后在分支上創建包含您的更改的分支,最后向存儲庫提交 Pull Request。
小技巧
如果你有幸在Odoo工作,那么這些分支已經存在了。它們托管在 https://github.com/odoo-dev/odoo 和 https://github.com/odoo-dev/enterprise 上。
創建完兩個分支后,它們的遠程地址可以添加到您的本地倉庫中。在下面的命令中,如有需要,請將 odoo-dev/odoo
和 odoo-dev/enterprise
替換為您的分支名稱。
$ cd $HOME/src/odoo
$ git remote add odoo-dev git@github.com:odoo-dev/odoo.git # Add odoo-dev as a new remote.
$ git remote rename origin odoo # Change the name of origin (the odoo repository) to odoo.
$ git remote set-url --push odoo no_push # Remove the possibility to push directly to odoo (you can only push to odoo-dev).
$ cd $HOME/src/enterprise
$ git remote add enterprise-dev git@github.com:odoo-dev/enterprise.git
$ git remote rename origin enterprise
$ git remote set-url --push enterprise no_push
安裝依賴項?
如 第一章:架構概述 所示,Odoo的服務器運行在Python上,并使用PostgreSQL作為關系型數據庫管理系統。在開發機上,最簡單的方法是本地安裝所有必要的組件。為此,請再次按照 安裝Odoo指南 進行操作。
小技巧
一些有用的 SQL 命令:
$ createdb $DB_NAME # Create a database.
$ dropdb $DB_NAME # Drop a database.
$ psql $DB_NAME # Connect to a database.
\l #List all the available databases.
\dt #List all the tables of the $DB_NAME database.
\d $TABLE_NAME #Show the structure of the table $TABLE_NAME.
\q #Quit the psql environment (ctrl + d).
運行服務器?
使用 odoo-bin
啟動?
一旦所有依賴項都設置好了,可以通過運行服務器的命令行界面 odoo-bin
來啟動 Odoo。
$ cd $HOME/src/odoo/
$ ./odoo-bin --addons-path="addons/,../enterprise/" -d rd-demo
有多個 命令行參數 可以用來運行服務器。在本教程中,您只需要其中的一些。
- -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>'
的錯誤。在這種情況下,你可能需要使用 $ 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 <https://www.google.com/intl/en/chrome/>
, Firefox <https://www.mozilla.org/firefox/new/>
或任何其他帶有開發工具的瀏覽器。
要登錄管理員用戶,請使用以下憑據:
電子郵件:
admin
密碼:
admin
啟用開發者模式?
開發者或調試模式對于培訓非常有用,因為它可以訪問其他(高級)工具。在接下來的章節中, 我們將始終假設您已啟用了開發者模式 。
現在啟用開發者模式 。選擇您喜歡的方法;它們都是等效的。
注解
只有至少安裝了一個應用程序,才能訪問設置屏幕的主頁面。在下一章節中,您將被引導安裝自己的應用程序。
額外工具?
有用的 Git 命令?
以下是一些日常工作中有用的 Git 命令。
- 切換分支:當您切換分支時,兩個倉庫(odoo 和 enterprise)必須同步,即兩者都需要在同一個分支中。
$ cd $HOME/src/odoo $ git switch 16.0 $ cd $HOME/src/enterprise $ git switch 16.0
獲取并變基:
$ cd $HOME/src/odoo $ git fetch --all --prune $ git rebase --autostash odoo/16.0 $ cd $HOME/src/enterprise $ git fetch --all --prune $ git rebase --autostash enterprise/16.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,您可以在此處找到 `配置文件示例<https://github.com/odoo/odoo/wiki/Javascript-coding-guidelines#use-a-linter>`_。
PostgreSQL的管理員工具?
您可以使用命令行管理您的PostgreSQL數據庫,就像之前演示的那樣,或者使用GUI應用程序,例如 pgAdmin 或 DBeaver。
我們建議您使用Unix套接字連接來連接GUI應用程序和數據庫。
主機名/地址:
/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)?
退出調試器。正在執行的程序被中止。
現在你的服務器已經運行,是時候開始 編寫你自己的應用程序 了!