SlideShare a Scribd company logo
1 of 22
Download to read offline
         
Version 1.3.0
Stéphane Bidoul <stephane.bidoul@acsone.eu>
Odoo development work ow
with pip and virtualenv
Python ecosystem packaging tools
Installation tools
Packaging tools
Start reading from Python Packaging Authority.
pip to install Python packages
virtualenv to create isolated Python environments
·
·
setuptools to de ne projects and create distributions
wheel the modern Python built distribution format
·
·
Copyright © 2016-2017 ACSONE SA/NV 2/22
virtualenv
Create and activate a new virtualenv named myproject:
Upgrade to a recent pip version in your activated virtualenv:
$ virtualenv myproject
$ source myproject/bin/activate
$ pip install -U "pip>=9.0.1"
Copyright © 2016-2017 ACSONE SA/NV 3/22
virtualenv (2)
To juggle many projects, use virtualenvwrapper.
Create and activate a virtualenv for a new project:
Easily switch project:
$ mkdir ~/project1
$ mkvirtualenv project1 -a ~/project1
$ pip install -U "pip>=9.0.1"
$ workon project1
$ workon project2
Copyright © 2016-2017 ACSONE SA/NV 4/22
Installing python packages
Install a library and its dependencies:
Find what is installed:
$ pip install hieroglyph
Collecting hieroglyph
Downloading hieroglyph-0.7.1-py2.py3-none-any.whl (1.6MB)
100% |████████████████████████████████| 1.7MB 3.6MB/s
Collecting Sphinx>=1.2 (from hieroglyph)
Downloading Sphinx-1.4.6-py2.py3-none-any.whl (1.6MB)
100% |████████████████████████████████| 1.6MB 3.7MB/s
[...]
Successfully installed Jinja2-2.8 MarkupSafe-0.23 Pygments-2.1.3
Sphinx-1.4.6 alabaster-0.7.9 babel-2.3.4 docutils-0.12 [...]
$ pip list
Copyright © 2016-2017 ACSONE SA/NV 5/22
Start working on a python project
Git clone it.
Install in editable (aka develop) mode:
This installs the latest version of dependencies.
Projects usually provide a known-good set of dependency versions in
requirements.txt:
$ pip install -e . # or python setup.py develop
$ pip install -r requirements.txt
$ pip install -e .
Copyright © 2016-2017 ACSONE SA/NV 6/22
Working with unrelased libraries
Just pip install them from git.
If you want to hack your own version, fork it and install it in editable mode:
If you have it cloned locally already
$ pip install -e git+https://github.com/nyergler/hieroglyph.git#egg=hieroglyph
$ pip install -e git+ssh://git@github.com/sbidoul/hieroglyph.git#egg=hieroglyph
$ pip install -e ~/projects/hieroglyph
Copyright © 2016-2017 ACSONE SA/NV 7/22
Freeze
Because you git tag everything you send to production, don't you?
Create a repeatable know-good set of dependencies.
$ pip freeze > requirements.txt
$ cat requirements.txt
alabaster==0.7.9
Babel==2.3.4
docutils==0.12
-e git+https://github.com/nyergler/hieroglyph.git@800323dea#egg=hieroglyph
Pygments==2.1.3
Sphinx==1.4.6
[...]
Copyright © 2016-2017 ACSONE SA/NV 8/22
What about the Odoo ecosystem?
Current state
It does not need to be so di cult.
After all Odoo addons are just python code.
install Odoo using standard python tools, so far so good
locate and download addons (on apps.odoo.com, github, etc)
read their manifest and/or doc to nd dependencies (other addons, python
dependencies)
manually install dependencies
ddle with --addons-path
start Odoo and hope for the best
repeat
·
·
·
·
·
·
·
Copyright © 2016-2017 ACSONE SA/NV 9/22
With setuptools-odoo, you can now do this [9.0]
Install Odoo 9 latest nightly:
Install mis_builder and it's dependencies:
Notice the installation of two dependent addons (date_range, report_xlsx) from
di erent OCA github repositories, and one python library (xslxwriter).
Tip: --pre is to get the latest development version of the addon and its
dependencies.
$ pip install https://nightly.odoo.com/9.0/nightly/src/odoo_9.0.latest.zip
$ pip install odoo9-addon-mis_builder --pre
Installing collected packages:
odoo9-addon-mis-builder,
odoo9-addon-date-range, odoo9-addon-report-xlsx,
xlsxwriter
Copyright © 2016-2017 ACSONE SA/NV 10/22
With setuptools-odoo, you can now do this [9.0]
(2)
Freeze:
You can work with development branches too:
$ pip freeze | grep odoo
odoo==9.0rc20160918
odoo9-addon-date-range==9.0.1.0.0.99.dev11
odoo9-addon-mis-builder==9.0.2.0.1.99.dev2
odoo9-addon-report-xlsx==9.0.1.0.0.99.dev1
$ pip install -e git+https://github.com/acsone/account-financial-reporting
> @9.0-imp_mis_builder_style_9e_tbi#
> egg=odoo9-addon-mis_builder&subdirectory=setup/mis_builder
Copyright © 2016-2017 ACSONE SA/NV 11/22
With setuptools-odoo, you can now do this [10.0]
Install Odoo 10 latest nightly:
Install account_fiscal_year and it's dependencies:
Notice the installation of one dependent addons (date_range) from di erent
OCA github repositories.
Tip: --pre is to get the latest development version of the addon and its
dependencies.
$ pip install https://nightly.odoo.com/10.0/nightly/src/odoo_10.0.latest.zip
$ pip install odoo10-addon-account_fiscal_year --pre
Installing collected packages:
odoo10-addon-date-range
Copyright © 2016-2017 ACSONE SA/NV 12/22
With setuptools-odoo, you can now do this [10.0]
(2)
Freeze:
You can work with development branches too:
$ pip freeze | grep odoo
odoo==10.0.post20161011
odoo10-addon-account-fiscal-year==10.0.1.0.0
odoo10-addon-date-range==10.0.1.0.0
$ pip install -e git+https://github.com/acsone/account-invoicing
> @10-mig-account_invoice_supplier_ref_unique-ape#
> egg=odoo10-addon-account_invoice_supplier_ref_unique
> &subdirectory=setup/account_invoice_supplier_ref_unique
Copyright © 2016-2017 ACSONE SA/NV 13/22
Packaging your own addons [9.0]
Create the following directory structure:
Where odoo_addons/__init__.py contains:
setup.py
odoo_addons/__init__.py
odoo_addons/youraddon/__openerp__.py
odoo_addons/youraddon/__init__.py
odoo_addons/youraddon/models/...
__import__('pkg_resources').declare_namespace(__name__)
Copyright © 2016-2017 ACSONE SA/NV 14/22
Packaging your own addons [9.0] (2)
And setup.py is:
The odoo_addon keyword does the magic by examining the addon's
__openerp__.py.
from setuptools import setup
setup(
setup_requires=['setuptools-odoo']
odoo_addon=True,
)
Copyright © 2016-2017 ACSONE SA/NV 15/22
Packaging your own addons [9.0] (3)
In this example it is the equivalent of:
from setuptools import setup
setup(
name='odoo9-addon-youraddon',
version='...', # version from manifest
description='...', # summary from manifest
long_description='...', # description from manifest or README.rst
url='...', # url from manifest
install_requires=['odoo>=9.0a,<9.1a',
'odoo9-addon-dependency1', 'odoo9-addon-dependency2',
'some_python_dependency'],
packages=['odoo_addons',
'odoo_addons.youraddon', 'odoo_addons.youraddon.models', ...],
namespace_packages=['odoo_addons'],
include_package_data=True,
license='AGPL-3')
Copyright © 2016-2017 ACSONE SA/NV 16/22
Packaging your own addons [10.0]
Create the following directory structure:
Where odoo/__init__.py and odoo/addons/__init__.py contains:
setup.py
odoo/__init__.py
odoo/addons/__init__.py
odoo/addons/youraddon/__manifest__.py
odoo/addons/youraddon/__init__.py
odoo/addons/youraddon/models/...
__import__('pkg_resources').declare_namespace(__name__)
Copyright © 2016-2017 ACSONE SA/NV 17/22
Packaging your own addons [10.0] (2)
And setup.py is:
The odoo_addon keyword does the magic by examining the addon's
__manifest__.py.
from setuptools import setup
setup(
setup_requires=['setuptools-odoo']
odoo_addon=True,
)
Copyright © 2016-2017 ACSONE SA/NV 18/22
Packaging your own addons [10.0] (3)
In this example it is the equivalent of:
from setuptools import setup
setup(
name='odoo10-addon-youraddon',
version='...', # version from manifest
description='...', # summary from manifest
long_description='...', # description from manifest or README.rst
url='...', # url from manifest
install_requires=['odoo>=10.0,<10.1dev',
'odoo10-addon-dependency1', 'odoo10-addon-dependency2',
'some_python_dependency'],
packages=['odoo', 'odoo.addons',
'odoo.addons.youraddon', 'odoo_addons.youraddon.models', ...],
namespace_packages=['odoo', 'odoo.addons'],
include_package_data=True,
license='AGPL-3')
Copyright © 2016-2017 ACSONE SA/NV 19/22
Automatic discovery of installed addons
In Odoo 8 and 9, addons installed this way can be discovered automatically using
odoo-autodiscover.
In Odoo 10, autodiscovery of installed addons is a built-in feature, so starting
odoo is enough for it to extend the addons-path automatically..
The main di erence between 8/9 and 10 is that in the namespace package for
addons is odoo.addons (directory odoo/addons) instead of odoo_addons (in 8
and 9).
Copyright © 2016-2017 ACSONE SA/NV 20/22
Bringing Odoo into the python ecosystem
automatic discovery of dependencies
automatic discovery of installed addons, no need to maintain --addons-path
robust install/uninstall
freeze !
pythonistas don't need to learn new tools
·
·
·
·
·
Copyright © 2016-2017 ACSONE SA/NV 21/22
Q&A
Thank You
@sbidoul
stephane.bidoul@acsone.eu
https://acsone.eu/
https://wheelhouse.odoo-community.org/
Copyright © 2016-2017 ACSONE SA/NV 22/22

More Related Content

What's hot

SonarQube - The leading platform for Continuous Code Quality
SonarQube - The leading platform for Continuous Code QualitySonarQube - The leading platform for Continuous Code Quality
SonarQube - The leading platform for Continuous Code QualityLarry Nung
 
odoo 11.0 development (CRUD)
odoo 11.0 development (CRUD)odoo 11.0 development (CRUD)
odoo 11.0 development (CRUD)Mohamed Magdy
 
Impact of the New ORM on Your Modules
Impact of the New ORM on Your ModulesImpact of the New ORM on Your Modules
Impact of the New ORM on Your ModulesOdoo
 
Track code quality with SonarQube - short version
Track code quality with SonarQube - short versionTrack code quality with SonarQube - short version
Track code quality with SonarQube - short versionDmytro Patserkovskyi
 
Instant Printing of any Odoo Report or Shipping Label
Instant Printing of any Odoo Report or Shipping LabelInstant Printing of any Odoo Report or Shipping Label
Instant Printing of any Odoo Report or Shipping LabelOdoo
 
Improving the performance of Odoo deployments
Improving the performance of Odoo deploymentsImproving the performance of Odoo deployments
Improving the performance of Odoo deploymentsOdoo
 
Odoo Enterprise Resource Planning System
Odoo Enterprise Resource Planning SystemOdoo Enterprise Resource Planning System
Odoo Enterprise Resource Planning SystemFahad Saleem
 
An all in-one Engineer-to-Order (ETO) Solution with Odoo
An all in-one Engineer-to-Order (ETO) Solution with OdooAn all in-one Engineer-to-Order (ETO) Solution with Odoo
An all in-one Engineer-to-Order (ETO) Solution with OdooOdoo
 
Defining Gantt View in Odoo 15
Defining Gantt View in Odoo 15Defining Gantt View in Odoo 15
Defining Gantt View in Odoo 15Celine George
 
Sonarqube
SonarqubeSonarqube
SonarqubeKalkey
 
Best Practices in Handling Performance Issues
Best Practices in Handling Performance IssuesBest Practices in Handling Performance Issues
Best Practices in Handling Performance IssuesOdoo
 
Discover GraphQL with Python, Graphene and Odoo
Discover GraphQL with Python, Graphene and OdooDiscover GraphQL with Python, Graphene and Odoo
Discover GraphQL with Python, Graphene and OdooOdoo
 
SonarQube: Continuous Code Inspection
SonarQube: Continuous Code InspectionSonarQube: Continuous Code Inspection
SonarQube: Continuous Code InspectionMichael Jesse
 
mis_builder 2016
mis_builder 2016mis_builder 2016
mis_builder 2016acsone
 
SonarQube - Should I Stay or Should I Go ?
SonarQube - Should I Stay or Should I Go ? SonarQube - Should I Stay or Should I Go ?
SonarQube - Should I Stay or Should I Go ? Geeks Anonymes
 
Becoming an Odoo Expert: How to Prepare for the Certification
Becoming an Odoo Expert: How to Prepare for the Certification Becoming an Odoo Expert: How to Prepare for the Certification
Becoming an Odoo Expert: How to Prepare for the Certification Odoo
 
Best Tools for first time Odoo Development
Best Tools for first time Odoo DevelopmentBest Tools for first time Odoo Development
Best Tools for first time Odoo DevelopmentOdoo
 

What's hot (20)

SonarQube - The leading platform for Continuous Code Quality
SonarQube - The leading platform for Continuous Code QualitySonarQube - The leading platform for Continuous Code Quality
SonarQube - The leading platform for Continuous Code Quality
 
Odoo presentation
Odoo presentationOdoo presentation
Odoo presentation
 
odoo 11.0 development (CRUD)
odoo 11.0 development (CRUD)odoo 11.0 development (CRUD)
odoo 11.0 development (CRUD)
 
Impact of the New ORM on Your Modules
Impact of the New ORM on Your ModulesImpact of the New ORM on Your Modules
Impact of the New ORM on Your Modules
 
Track code quality with SonarQube - short version
Track code quality with SonarQube - short versionTrack code quality with SonarQube - short version
Track code quality with SonarQube - short version
 
Instant Printing of any Odoo Report or Shipping Label
Instant Printing of any Odoo Report or Shipping LabelInstant Printing of any Odoo Report or Shipping Label
Instant Printing of any Odoo Report or Shipping Label
 
Improving the performance of Odoo deployments
Improving the performance of Odoo deploymentsImproving the performance of Odoo deployments
Improving the performance of Odoo deployments
 
Why to docker
Why to dockerWhy to docker
Why to docker
 
Odoo Enterprise Resource Planning System
Odoo Enterprise Resource Planning SystemOdoo Enterprise Resource Planning System
Odoo Enterprise Resource Planning System
 
SonarQube Overview
SonarQube OverviewSonarQube Overview
SonarQube Overview
 
An all in-one Engineer-to-Order (ETO) Solution with Odoo
An all in-one Engineer-to-Order (ETO) Solution with OdooAn all in-one Engineer-to-Order (ETO) Solution with Odoo
An all in-one Engineer-to-Order (ETO) Solution with Odoo
 
Defining Gantt View in Odoo 15
Defining Gantt View in Odoo 15Defining Gantt View in Odoo 15
Defining Gantt View in Odoo 15
 
Sonarqube
SonarqubeSonarqube
Sonarqube
 
Best Practices in Handling Performance Issues
Best Practices in Handling Performance IssuesBest Practices in Handling Performance Issues
Best Practices in Handling Performance Issues
 
Discover GraphQL with Python, Graphene and Odoo
Discover GraphQL with Python, Graphene and OdooDiscover GraphQL with Python, Graphene and Odoo
Discover GraphQL with Python, Graphene and Odoo
 
SonarQube: Continuous Code Inspection
SonarQube: Continuous Code InspectionSonarQube: Continuous Code Inspection
SonarQube: Continuous Code Inspection
 
mis_builder 2016
mis_builder 2016mis_builder 2016
mis_builder 2016
 
SonarQube - Should I Stay or Should I Go ?
SonarQube - Should I Stay or Should I Go ? SonarQube - Should I Stay or Should I Go ?
SonarQube - Should I Stay or Should I Go ?
 
Becoming an Odoo Expert: How to Prepare for the Certification
Becoming an Odoo Expert: How to Prepare for the Certification Becoming an Odoo Expert: How to Prepare for the Certification
Becoming an Odoo Expert: How to Prepare for the Certification
 
Best Tools for first time Odoo Development
Best Tools for first time Odoo DevelopmentBest Tools for first time Odoo Development
Best Tools for first time Odoo Development
 

Similar to Odoo development workflow with pip and virtualenv

Makefiles in 2020 — Why they still matter
Makefiles in 2020 — Why they still matterMakefiles in 2020 — Why they still matter
Makefiles in 2020 — Why they still matterSimon Brüggen
 
Capifony. Minsk PHP MeetUp #11
Capifony. Minsk PHP MeetUp #11Capifony. Minsk PHP MeetUp #11
Capifony. Minsk PHP MeetUp #11Yury Pliashkou
 
Arbeiten mit distribute, pip und virtualenv
Arbeiten mit distribute, pip und virtualenvArbeiten mit distribute, pip und virtualenv
Arbeiten mit distribute, pip und virtualenvMarkus Zapke-Gründemann
 
Docker and Django Meet For A Tango - London Meetup
Docker and Django Meet For A Tango - London MeetupDocker and Django Meet For A Tango - London Meetup
Docker and Django Meet For A Tango - London Meetupfrentrup
 
Virtual Environment and Web development using Django
Virtual Environment and Web development using DjangoVirtual Environment and Web development using Django
Virtual Environment and Web development using DjangoSunil kumar Mohanty
 
ContainerDays NYC 2016: "Introduction to Application Automation with Habitat"...
ContainerDays NYC 2016: "Introduction to Application Automation with Habitat"...ContainerDays NYC 2016: "Introduction to Application Automation with Habitat"...
ContainerDays NYC 2016: "Introduction to Application Automation with Habitat"...DynamicInfraDays
 
Python from zero to hero (Twitter Explorer)
Python from zero to hero (Twitter Explorer)Python from zero to hero (Twitter Explorer)
Python from zero to hero (Twitter Explorer)Yuriy Senko
 
Martin Aspeli Extending And Customising Plone 3
Martin Aspeli   Extending And Customising Plone 3Martin Aspeli   Extending And Customising Plone 3
Martin Aspeli Extending And Customising Plone 3Vincenzo Barone
 
DevNet Associate : Python introduction
DevNet Associate : Python introductionDevNet Associate : Python introduction
DevNet Associate : Python introductionJoel W. King
 
Continuous Web Performance Monitoring with Jenkins
Continuous Web Performance Monitoring with JenkinsContinuous Web Performance Monitoring with Jenkins
Continuous Web Performance Monitoring with JenkinsMichael Kröll
 
Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011)
Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011)Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011)
Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011)Fabrice Bernhard
 
How to setup Pycharm environment for Odoo 17.pptx
How to setup Pycharm environment for Odoo 17.pptxHow to setup Pycharm environment for Odoo 17.pptx
How to setup Pycharm environment for Odoo 17.pptxCeline George
 
How to host an app for $20 in 20min using buildout and hostout
How to host an app  for $20 in 20min using buildout and hostoutHow to host an app  for $20 in 20min using buildout and hostout
How to host an app for $20 in 20min using buildout and hostoutDylan Jay
 
DevFest 2022 - Cloud Workstation Introduction TaiChung
DevFest 2022 - Cloud Workstation Introduction TaiChungDevFest 2022 - Cloud Workstation Introduction TaiChung
DevFest 2022 - Cloud Workstation Introduction TaiChungKAI CHU CHUNG
 
Continuous Delivery w projekcie Open Source - Marcin Stachniuk - DevCrowd 2017
Continuous Delivery w projekcie Open Source - Marcin Stachniuk - DevCrowd 2017Continuous Delivery w projekcie Open Source - Marcin Stachniuk - DevCrowd 2017
Continuous Delivery w projekcie Open Source - Marcin Stachniuk - DevCrowd 2017MarcinStachniuk
 
Marek Kuziel - Deploying Django with Buildout
Marek Kuziel - Deploying Django with BuildoutMarek Kuziel - Deploying Django with Buildout
Marek Kuziel - Deploying Django with Buildoutmarekkuziel
 
How to Webpack your Django!
How to Webpack your Django!How to Webpack your Django!
How to Webpack your Django!David Gibbons
 
Improve your Java Environment with Docker
Improve your Java Environment with DockerImprove your Java Environment with Docker
Improve your Java Environment with DockerHanoiJUG
 
Opps i deployed it again
Opps i deployed it againOpps i deployed it again
Opps i deployed it againDylan Jay
 

Similar to Odoo development workflow with pip and virtualenv (20)

Makefiles in 2020 — Why they still matter
Makefiles in 2020 — Why they still matterMakefiles in 2020 — Why they still matter
Makefiles in 2020 — Why they still matter
 
Capifony. Minsk PHP MeetUp #11
Capifony. Minsk PHP MeetUp #11Capifony. Minsk PHP MeetUp #11
Capifony. Minsk PHP MeetUp #11
 
Arbeiten mit distribute, pip und virtualenv
Arbeiten mit distribute, pip und virtualenvArbeiten mit distribute, pip und virtualenv
Arbeiten mit distribute, pip und virtualenv
 
Docker and Django Meet For A Tango - London Meetup
Docker and Django Meet For A Tango - London MeetupDocker and Django Meet For A Tango - London Meetup
Docker and Django Meet For A Tango - London Meetup
 
Virtual Environment and Web development using Django
Virtual Environment and Web development using DjangoVirtual Environment and Web development using Django
Virtual Environment and Web development using Django
 
ContainerDays NYC 2016: "Introduction to Application Automation with Habitat"...
ContainerDays NYC 2016: "Introduction to Application Automation with Habitat"...ContainerDays NYC 2016: "Introduction to Application Automation with Habitat"...
ContainerDays NYC 2016: "Introduction to Application Automation with Habitat"...
 
Python from zero to hero (Twitter Explorer)
Python from zero to hero (Twitter Explorer)Python from zero to hero (Twitter Explorer)
Python from zero to hero (Twitter Explorer)
 
Martin Aspeli Extending And Customising Plone 3
Martin Aspeli   Extending And Customising Plone 3Martin Aspeli   Extending And Customising Plone 3
Martin Aspeli Extending And Customising Plone 3
 
DevNet Associate : Python introduction
DevNet Associate : Python introductionDevNet Associate : Python introduction
DevNet Associate : Python introduction
 
Continuous Web Performance Monitoring with Jenkins
Continuous Web Performance Monitoring with JenkinsContinuous Web Performance Monitoring with Jenkins
Continuous Web Performance Monitoring with Jenkins
 
Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011)
Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011)Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011)
Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011)
 
How to setup Pycharm environment for Odoo 17.pptx
How to setup Pycharm environment for Odoo 17.pptxHow to setup Pycharm environment for Odoo 17.pptx
How to setup Pycharm environment for Odoo 17.pptx
 
How to host an app for $20 in 20min using buildout and hostout
How to host an app  for $20 in 20min using buildout and hostoutHow to host an app  for $20 in 20min using buildout and hostout
How to host an app for $20 in 20min using buildout and hostout
 
DevFest 2022 - Cloud Workstation Introduction TaiChung
DevFest 2022 - Cloud Workstation Introduction TaiChungDevFest 2022 - Cloud Workstation Introduction TaiChung
DevFest 2022 - Cloud Workstation Introduction TaiChung
 
Welcome to Jenkins
Welcome to JenkinsWelcome to Jenkins
Welcome to Jenkins
 
Continuous Delivery w projekcie Open Source - Marcin Stachniuk - DevCrowd 2017
Continuous Delivery w projekcie Open Source - Marcin Stachniuk - DevCrowd 2017Continuous Delivery w projekcie Open Source - Marcin Stachniuk - DevCrowd 2017
Continuous Delivery w projekcie Open Source - Marcin Stachniuk - DevCrowd 2017
 
Marek Kuziel - Deploying Django with Buildout
Marek Kuziel - Deploying Django with BuildoutMarek Kuziel - Deploying Django with Buildout
Marek Kuziel - Deploying Django with Buildout
 
How to Webpack your Django!
How to Webpack your Django!How to Webpack your Django!
How to Webpack your Django!
 
Improve your Java Environment with Docker
Improve your Java Environment with DockerImprove your Java Environment with Docker
Improve your Java Environment with Docker
 
Opps i deployed it again
Opps i deployed it againOpps i deployed it again
Opps i deployed it again
 

Recently uploaded

KALYANI 💋 Call Girl 9827461493 Call Girls in Escort service book now
KALYANI 💋 Call Girl 9827461493 Call Girls in  Escort service book nowKALYANI 💋 Call Girl 9827461493 Call Girls in  Escort service book now
KALYANI 💋 Call Girl 9827461493 Call Girls in Escort service book nowkapoorjyoti4444
 
Uneak White's Personal Brand Exploration Presentation
Uneak White's Personal Brand Exploration PresentationUneak White's Personal Brand Exploration Presentation
Uneak White's Personal Brand Exploration Presentationuneakwhite
 
Unveiling Falcon Invoice Discounting: Leading the Way as India's Premier Bill...
Unveiling Falcon Invoice Discounting: Leading the Way as India's Premier Bill...Unveiling Falcon Invoice Discounting: Leading the Way as India's Premier Bill...
Unveiling Falcon Invoice Discounting: Leading the Way as India's Premier Bill...Falcon Invoice Discounting
 
Chennai Call Gril 80022//12248 Only For Sex And High Profile Best Gril Sex Av...
Chennai Call Gril 80022//12248 Only For Sex And High Profile Best Gril Sex Av...Chennai Call Gril 80022//12248 Only For Sex And High Profile Best Gril Sex Av...
Chennai Call Gril 80022//12248 Only For Sex And High Profile Best Gril Sex Av...pujan9679
 
PHX May 2024 Corporate Presentation Final
PHX May 2024 Corporate Presentation FinalPHX May 2024 Corporate Presentation Final
PHX May 2024 Corporate Presentation FinalPanhandleOilandGas
 
JAJPUR CALL GIRL ❤ 82729*64427❤ CALL GIRLS IN JAJPUR ESCORTS
JAJPUR CALL GIRL ❤ 82729*64427❤ CALL GIRLS IN JAJPUR  ESCORTSJAJPUR CALL GIRL ❤ 82729*64427❤ CALL GIRLS IN JAJPUR  ESCORTS
JAJPUR CALL GIRL ❤ 82729*64427❤ CALL GIRLS IN JAJPUR ESCORTSkajalroy875762
 
PARK STREET 💋 Call Girl 9827461493 Call Girls in Escort service book now
PARK STREET 💋 Call Girl 9827461493 Call Girls in  Escort service book nowPARK STREET 💋 Call Girl 9827461493 Call Girls in  Escort service book now
PARK STREET 💋 Call Girl 9827461493 Call Girls in Escort service book nowkapoorjyoti4444
 
The Abortion pills for sale in Qatar@Doha [+27737758557] []Deira Dubai Kuwait
The Abortion pills for sale in Qatar@Doha [+27737758557] []Deira Dubai KuwaitThe Abortion pills for sale in Qatar@Doha [+27737758557] []Deira Dubai Kuwait
The Abortion pills for sale in Qatar@Doha [+27737758557] []Deira Dubai Kuwaitdaisycvs
 
Al Mizhar Dubai Escorts +971561403006 Escorts Service In Al Mizhar
Al Mizhar Dubai Escorts +971561403006 Escorts Service In Al MizharAl Mizhar Dubai Escorts +971561403006 Escorts Service In Al Mizhar
Al Mizhar Dubai Escorts +971561403006 Escorts Service In Al Mizharallensay1
 
Pre Engineered Building Manufacturers Hyderabad.pptx
Pre Engineered  Building Manufacturers Hyderabad.pptxPre Engineered  Building Manufacturers Hyderabad.pptx
Pre Engineered Building Manufacturers Hyderabad.pptxRoofing Contractor
 
Berhampur 70918*19311 CALL GIRLS IN ESCORT SERVICE WE ARE PROVIDING
Berhampur 70918*19311 CALL GIRLS IN ESCORT SERVICE WE ARE PROVIDINGBerhampur 70918*19311 CALL GIRLS IN ESCORT SERVICE WE ARE PROVIDING
Berhampur 70918*19311 CALL GIRLS IN ESCORT SERVICE WE ARE PROVIDINGpr788182
 
Only Cash On Delivery Call Girls In Sikandarpur Gurgaon ❤️8448577510 ⊹Escorts...
Only Cash On Delivery Call Girls In Sikandarpur Gurgaon ❤️8448577510 ⊹Escorts...Only Cash On Delivery Call Girls In Sikandarpur Gurgaon ❤️8448577510 ⊹Escorts...
Only Cash On Delivery Call Girls In Sikandarpur Gurgaon ❤️8448577510 ⊹Escorts...lizamodels9
 
Falcon Invoice Discounting: Unlock Your Business Potential
Falcon Invoice Discounting: Unlock Your Business PotentialFalcon Invoice Discounting: Unlock Your Business Potential
Falcon Invoice Discounting: Unlock Your Business PotentialFalcon investment
 
Katrina Personal Brand Project and portfolio 1
Katrina Personal Brand Project and portfolio 1Katrina Personal Brand Project and portfolio 1
Katrina Personal Brand Project and portfolio 1kcpayne
 
Berhampur CALL GIRL❤7091819311❤CALL GIRLS IN ESCORT SERVICE WE ARE PROVIDING
Berhampur CALL GIRL❤7091819311❤CALL GIRLS IN ESCORT SERVICE WE ARE PROVIDINGBerhampur CALL GIRL❤7091819311❤CALL GIRLS IN ESCORT SERVICE WE ARE PROVIDING
Berhampur CALL GIRL❤7091819311❤CALL GIRLS IN ESCORT SERVICE WE ARE PROVIDINGpr788182
 
Puri CALL GIRL ❤️8084732287❤️ CALL GIRLS IN ESCORT SERVICE WE ARW PROVIDING
Puri CALL GIRL ❤️8084732287❤️ CALL GIRLS IN ESCORT SERVICE WE ARW PROVIDINGPuri CALL GIRL ❤️8084732287❤️ CALL GIRLS IN ESCORT SERVICE WE ARW PROVIDING
Puri CALL GIRL ❤️8084732287❤️ CALL GIRLS IN ESCORT SERVICE WE ARW PROVIDINGpriyakumari801827
 
Cuttack Call Girl Just Call 8084732287 Top Class Call Girl Service Available
Cuttack Call Girl Just Call 8084732287 Top Class Call Girl Service AvailableCuttack Call Girl Just Call 8084732287 Top Class Call Girl Service Available
Cuttack Call Girl Just Call 8084732287 Top Class Call Girl Service Availablepr788182
 
Jual Obat Aborsi ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan Cytotec
Jual Obat Aborsi ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan CytotecJual Obat Aborsi ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan Cytotec
Jual Obat Aborsi ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan CytotecZurliaSoop
 

Recently uploaded (20)

KALYANI 💋 Call Girl 9827461493 Call Girls in Escort service book now
KALYANI 💋 Call Girl 9827461493 Call Girls in  Escort service book nowKALYANI 💋 Call Girl 9827461493 Call Girls in  Escort service book now
KALYANI 💋 Call Girl 9827461493 Call Girls in Escort service book now
 
Buy gmail accounts.pdf buy Old Gmail Accounts
Buy gmail accounts.pdf buy Old Gmail AccountsBuy gmail accounts.pdf buy Old Gmail Accounts
Buy gmail accounts.pdf buy Old Gmail Accounts
 
Uneak White's Personal Brand Exploration Presentation
Uneak White's Personal Brand Exploration PresentationUneak White's Personal Brand Exploration Presentation
Uneak White's Personal Brand Exploration Presentation
 
Unveiling Falcon Invoice Discounting: Leading the Way as India's Premier Bill...
Unveiling Falcon Invoice Discounting: Leading the Way as India's Premier Bill...Unveiling Falcon Invoice Discounting: Leading the Way as India's Premier Bill...
Unveiling Falcon Invoice Discounting: Leading the Way as India's Premier Bill...
 
Chennai Call Gril 80022//12248 Only For Sex And High Profile Best Gril Sex Av...
Chennai Call Gril 80022//12248 Only For Sex And High Profile Best Gril Sex Av...Chennai Call Gril 80022//12248 Only For Sex And High Profile Best Gril Sex Av...
Chennai Call Gril 80022//12248 Only For Sex And High Profile Best Gril Sex Av...
 
PHX May 2024 Corporate Presentation Final
PHX May 2024 Corporate Presentation FinalPHX May 2024 Corporate Presentation Final
PHX May 2024 Corporate Presentation Final
 
JAJPUR CALL GIRL ❤ 82729*64427❤ CALL GIRLS IN JAJPUR ESCORTS
JAJPUR CALL GIRL ❤ 82729*64427❤ CALL GIRLS IN JAJPUR  ESCORTSJAJPUR CALL GIRL ❤ 82729*64427❤ CALL GIRLS IN JAJPUR  ESCORTS
JAJPUR CALL GIRL ❤ 82729*64427❤ CALL GIRLS IN JAJPUR ESCORTS
 
PARK STREET 💋 Call Girl 9827461493 Call Girls in Escort service book now
PARK STREET 💋 Call Girl 9827461493 Call Girls in  Escort service book nowPARK STREET 💋 Call Girl 9827461493 Call Girls in  Escort service book now
PARK STREET 💋 Call Girl 9827461493 Call Girls in Escort service book now
 
The Abortion pills for sale in Qatar@Doha [+27737758557] []Deira Dubai Kuwait
The Abortion pills for sale in Qatar@Doha [+27737758557] []Deira Dubai KuwaitThe Abortion pills for sale in Qatar@Doha [+27737758557] []Deira Dubai Kuwait
The Abortion pills for sale in Qatar@Doha [+27737758557] []Deira Dubai Kuwait
 
Al Mizhar Dubai Escorts +971561403006 Escorts Service In Al Mizhar
Al Mizhar Dubai Escorts +971561403006 Escorts Service In Al MizharAl Mizhar Dubai Escorts +971561403006 Escorts Service In Al Mizhar
Al Mizhar Dubai Escorts +971561403006 Escorts Service In Al Mizhar
 
Pre Engineered Building Manufacturers Hyderabad.pptx
Pre Engineered  Building Manufacturers Hyderabad.pptxPre Engineered  Building Manufacturers Hyderabad.pptx
Pre Engineered Building Manufacturers Hyderabad.pptx
 
Berhampur 70918*19311 CALL GIRLS IN ESCORT SERVICE WE ARE PROVIDING
Berhampur 70918*19311 CALL GIRLS IN ESCORT SERVICE WE ARE PROVIDINGBerhampur 70918*19311 CALL GIRLS IN ESCORT SERVICE WE ARE PROVIDING
Berhampur 70918*19311 CALL GIRLS IN ESCORT SERVICE WE ARE PROVIDING
 
Only Cash On Delivery Call Girls In Sikandarpur Gurgaon ❤️8448577510 ⊹Escorts...
Only Cash On Delivery Call Girls In Sikandarpur Gurgaon ❤️8448577510 ⊹Escorts...Only Cash On Delivery Call Girls In Sikandarpur Gurgaon ❤️8448577510 ⊹Escorts...
Only Cash On Delivery Call Girls In Sikandarpur Gurgaon ❤️8448577510 ⊹Escorts...
 
HomeRoots Pitch Deck | Investor Insights | April 2024
HomeRoots Pitch Deck | Investor Insights | April 2024HomeRoots Pitch Deck | Investor Insights | April 2024
HomeRoots Pitch Deck | Investor Insights | April 2024
 
Falcon Invoice Discounting: Unlock Your Business Potential
Falcon Invoice Discounting: Unlock Your Business PotentialFalcon Invoice Discounting: Unlock Your Business Potential
Falcon Invoice Discounting: Unlock Your Business Potential
 
Katrina Personal Brand Project and portfolio 1
Katrina Personal Brand Project and portfolio 1Katrina Personal Brand Project and portfolio 1
Katrina Personal Brand Project and portfolio 1
 
Berhampur CALL GIRL❤7091819311❤CALL GIRLS IN ESCORT SERVICE WE ARE PROVIDING
Berhampur CALL GIRL❤7091819311❤CALL GIRLS IN ESCORT SERVICE WE ARE PROVIDINGBerhampur CALL GIRL❤7091819311❤CALL GIRLS IN ESCORT SERVICE WE ARE PROVIDING
Berhampur CALL GIRL❤7091819311❤CALL GIRLS IN ESCORT SERVICE WE ARE PROVIDING
 
Puri CALL GIRL ❤️8084732287❤️ CALL GIRLS IN ESCORT SERVICE WE ARW PROVIDING
Puri CALL GIRL ❤️8084732287❤️ CALL GIRLS IN ESCORT SERVICE WE ARW PROVIDINGPuri CALL GIRL ❤️8084732287❤️ CALL GIRLS IN ESCORT SERVICE WE ARW PROVIDING
Puri CALL GIRL ❤️8084732287❤️ CALL GIRLS IN ESCORT SERVICE WE ARW PROVIDING
 
Cuttack Call Girl Just Call 8084732287 Top Class Call Girl Service Available
Cuttack Call Girl Just Call 8084732287 Top Class Call Girl Service AvailableCuttack Call Girl Just Call 8084732287 Top Class Call Girl Service Available
Cuttack Call Girl Just Call 8084732287 Top Class Call Girl Service Available
 
Jual Obat Aborsi ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan Cytotec
Jual Obat Aborsi ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan CytotecJual Obat Aborsi ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan Cytotec
Jual Obat Aborsi ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan Cytotec
 

Odoo development workflow with pip and virtualenv

  • 1.           Version 1.3.0 Stéphane Bidoul <stephane.bidoul@acsone.eu> Odoo development work ow with pip and virtualenv
  • 2. Python ecosystem packaging tools Installation tools Packaging tools Start reading from Python Packaging Authority. pip to install Python packages virtualenv to create isolated Python environments · · setuptools to de ne projects and create distributions wheel the modern Python built distribution format · · Copyright © 2016-2017 ACSONE SA/NV 2/22
  • 3. virtualenv Create and activate a new virtualenv named myproject: Upgrade to a recent pip version in your activated virtualenv: $ virtualenv myproject $ source myproject/bin/activate $ pip install -U "pip>=9.0.1" Copyright © 2016-2017 ACSONE SA/NV 3/22
  • 4. virtualenv (2) To juggle many projects, use virtualenvwrapper. Create and activate a virtualenv for a new project: Easily switch project: $ mkdir ~/project1 $ mkvirtualenv project1 -a ~/project1 $ pip install -U "pip>=9.0.1" $ workon project1 $ workon project2 Copyright © 2016-2017 ACSONE SA/NV 4/22
  • 5. Installing python packages Install a library and its dependencies: Find what is installed: $ pip install hieroglyph Collecting hieroglyph Downloading hieroglyph-0.7.1-py2.py3-none-any.whl (1.6MB) 100% |████████████████████████████████| 1.7MB 3.6MB/s Collecting Sphinx>=1.2 (from hieroglyph) Downloading Sphinx-1.4.6-py2.py3-none-any.whl (1.6MB) 100% |████████████████████████████████| 1.6MB 3.7MB/s [...] Successfully installed Jinja2-2.8 MarkupSafe-0.23 Pygments-2.1.3 Sphinx-1.4.6 alabaster-0.7.9 babel-2.3.4 docutils-0.12 [...] $ pip list Copyright © 2016-2017 ACSONE SA/NV 5/22
  • 6. Start working on a python project Git clone it. Install in editable (aka develop) mode: This installs the latest version of dependencies. Projects usually provide a known-good set of dependency versions in requirements.txt: $ pip install -e . # or python setup.py develop $ pip install -r requirements.txt $ pip install -e . Copyright © 2016-2017 ACSONE SA/NV 6/22
  • 7. Working with unrelased libraries Just pip install them from git. If you want to hack your own version, fork it and install it in editable mode: If you have it cloned locally already $ pip install -e git+https://github.com/nyergler/hieroglyph.git#egg=hieroglyph $ pip install -e git+ssh://git@github.com/sbidoul/hieroglyph.git#egg=hieroglyph $ pip install -e ~/projects/hieroglyph Copyright © 2016-2017 ACSONE SA/NV 7/22
  • 8. Freeze Because you git tag everything you send to production, don't you? Create a repeatable know-good set of dependencies. $ pip freeze > requirements.txt $ cat requirements.txt alabaster==0.7.9 Babel==2.3.4 docutils==0.12 -e git+https://github.com/nyergler/hieroglyph.git@800323dea#egg=hieroglyph Pygments==2.1.3 Sphinx==1.4.6 [...] Copyright © 2016-2017 ACSONE SA/NV 8/22
  • 9. What about the Odoo ecosystem? Current state It does not need to be so di cult. After all Odoo addons are just python code. install Odoo using standard python tools, so far so good locate and download addons (on apps.odoo.com, github, etc) read their manifest and/or doc to nd dependencies (other addons, python dependencies) manually install dependencies ddle with --addons-path start Odoo and hope for the best repeat · · · · · · · Copyright © 2016-2017 ACSONE SA/NV 9/22
  • 10. With setuptools-odoo, you can now do this [9.0] Install Odoo 9 latest nightly: Install mis_builder and it's dependencies: Notice the installation of two dependent addons (date_range, report_xlsx) from di erent OCA github repositories, and one python library (xslxwriter). Tip: --pre is to get the latest development version of the addon and its dependencies. $ pip install https://nightly.odoo.com/9.0/nightly/src/odoo_9.0.latest.zip $ pip install odoo9-addon-mis_builder --pre Installing collected packages: odoo9-addon-mis-builder, odoo9-addon-date-range, odoo9-addon-report-xlsx, xlsxwriter Copyright © 2016-2017 ACSONE SA/NV 10/22
  • 11. With setuptools-odoo, you can now do this [9.0] (2) Freeze: You can work with development branches too: $ pip freeze | grep odoo odoo==9.0rc20160918 odoo9-addon-date-range==9.0.1.0.0.99.dev11 odoo9-addon-mis-builder==9.0.2.0.1.99.dev2 odoo9-addon-report-xlsx==9.0.1.0.0.99.dev1 $ pip install -e git+https://github.com/acsone/account-financial-reporting > @9.0-imp_mis_builder_style_9e_tbi# > egg=odoo9-addon-mis_builder&subdirectory=setup/mis_builder Copyright © 2016-2017 ACSONE SA/NV 11/22
  • 12. With setuptools-odoo, you can now do this [10.0] Install Odoo 10 latest nightly: Install account_fiscal_year and it's dependencies: Notice the installation of one dependent addons (date_range) from di erent OCA github repositories. Tip: --pre is to get the latest development version of the addon and its dependencies. $ pip install https://nightly.odoo.com/10.0/nightly/src/odoo_10.0.latest.zip $ pip install odoo10-addon-account_fiscal_year --pre Installing collected packages: odoo10-addon-date-range Copyright © 2016-2017 ACSONE SA/NV 12/22
  • 13. With setuptools-odoo, you can now do this [10.0] (2) Freeze: You can work with development branches too: $ pip freeze | grep odoo odoo==10.0.post20161011 odoo10-addon-account-fiscal-year==10.0.1.0.0 odoo10-addon-date-range==10.0.1.0.0 $ pip install -e git+https://github.com/acsone/account-invoicing > @10-mig-account_invoice_supplier_ref_unique-ape# > egg=odoo10-addon-account_invoice_supplier_ref_unique > &subdirectory=setup/account_invoice_supplier_ref_unique Copyright © 2016-2017 ACSONE SA/NV 13/22
  • 14. Packaging your own addons [9.0] Create the following directory structure: Where odoo_addons/__init__.py contains: setup.py odoo_addons/__init__.py odoo_addons/youraddon/__openerp__.py odoo_addons/youraddon/__init__.py odoo_addons/youraddon/models/... __import__('pkg_resources').declare_namespace(__name__) Copyright © 2016-2017 ACSONE SA/NV 14/22
  • 15. Packaging your own addons [9.0] (2) And setup.py is: The odoo_addon keyword does the magic by examining the addon's __openerp__.py. from setuptools import setup setup( setup_requires=['setuptools-odoo'] odoo_addon=True, ) Copyright © 2016-2017 ACSONE SA/NV 15/22
  • 16. Packaging your own addons [9.0] (3) In this example it is the equivalent of: from setuptools import setup setup( name='odoo9-addon-youraddon', version='...', # version from manifest description='...', # summary from manifest long_description='...', # description from manifest or README.rst url='...', # url from manifest install_requires=['odoo>=9.0a,<9.1a', 'odoo9-addon-dependency1', 'odoo9-addon-dependency2', 'some_python_dependency'], packages=['odoo_addons', 'odoo_addons.youraddon', 'odoo_addons.youraddon.models', ...], namespace_packages=['odoo_addons'], include_package_data=True, license='AGPL-3') Copyright © 2016-2017 ACSONE SA/NV 16/22
  • 17. Packaging your own addons [10.0] Create the following directory structure: Where odoo/__init__.py and odoo/addons/__init__.py contains: setup.py odoo/__init__.py odoo/addons/__init__.py odoo/addons/youraddon/__manifest__.py odoo/addons/youraddon/__init__.py odoo/addons/youraddon/models/... __import__('pkg_resources').declare_namespace(__name__) Copyright © 2016-2017 ACSONE SA/NV 17/22
  • 18. Packaging your own addons [10.0] (2) And setup.py is: The odoo_addon keyword does the magic by examining the addon's __manifest__.py. from setuptools import setup setup( setup_requires=['setuptools-odoo'] odoo_addon=True, ) Copyright © 2016-2017 ACSONE SA/NV 18/22
  • 19. Packaging your own addons [10.0] (3) In this example it is the equivalent of: from setuptools import setup setup( name='odoo10-addon-youraddon', version='...', # version from manifest description='...', # summary from manifest long_description='...', # description from manifest or README.rst url='...', # url from manifest install_requires=['odoo>=10.0,<10.1dev', 'odoo10-addon-dependency1', 'odoo10-addon-dependency2', 'some_python_dependency'], packages=['odoo', 'odoo.addons', 'odoo.addons.youraddon', 'odoo_addons.youraddon.models', ...], namespace_packages=['odoo', 'odoo.addons'], include_package_data=True, license='AGPL-3') Copyright © 2016-2017 ACSONE SA/NV 19/22
  • 20. Automatic discovery of installed addons In Odoo 8 and 9, addons installed this way can be discovered automatically using odoo-autodiscover. In Odoo 10, autodiscovery of installed addons is a built-in feature, so starting odoo is enough for it to extend the addons-path automatically.. The main di erence between 8/9 and 10 is that in the namespace package for addons is odoo.addons (directory odoo/addons) instead of odoo_addons (in 8 and 9). Copyright © 2016-2017 ACSONE SA/NV 20/22
  • 21. Bringing Odoo into the python ecosystem automatic discovery of dependencies automatic discovery of installed addons, no need to maintain --addons-path robust install/uninstall freeze ! pythonistas don't need to learn new tools · · · · · Copyright © 2016-2017 ACSONE SA/NV 21/22