[REF] setup: cleanup and linting of setup.py, reworked MANIFEST, added requirements.txt
This commit is contained in:
parent
d9b739e8f6
commit
735924878f
29
MANIFEST.in
29
MANIFEST.in
|
@ -1,9 +1,20 @@
|
||||||
graft debian
|
recursive-include * *.css
|
||||||
graft doc
|
recursive-include * *.csv
|
||||||
graft setup
|
recursive-include * *.gif
|
||||||
graft openerp
|
recursive-include * *.html
|
||||||
include README.md
|
recursive-include * *.jpeg
|
||||||
include LICENSE
|
recursive-include * *.jpg
|
||||||
include openerp-*
|
recursive-include * *.js
|
||||||
include odoo*
|
recursive-include * *.md
|
||||||
global-exclude *pyc *~ # Exclude possible garbage from previous graft.
|
recursive-include * *.png
|
||||||
|
recursive-include * *.po
|
||||||
|
recursive-include * *.rng
|
||||||
|
recursive-include * *.rst
|
||||||
|
recursive-include * *.sass
|
||||||
|
recursive-include * *.sql
|
||||||
|
recursive-include * *.txt
|
||||||
|
recursive-include * *.ttf
|
||||||
|
recursive-include * *.woff
|
||||||
|
recursive-include * *.xml
|
||||||
|
recursive-include * *.yml
|
||||||
|
recursive-exclude * *.py[co]
|
|
@ -0,0 +1,41 @@
|
||||||
|
Babel==1.3
|
||||||
|
Jinja2==2.7.3
|
||||||
|
Mako==1.0.0
|
||||||
|
MarkupSafe==0.23
|
||||||
|
Pillow==2.5.1
|
||||||
|
http://download.gna.org/pychart/PyChart-1.39.tar.gz
|
||||||
|
PyYAML==3.11
|
||||||
|
Werkzeug==0.9.6
|
||||||
|
argparse==1.2.1
|
||||||
|
decorator==3.4.0
|
||||||
|
docutils==0.12
|
||||||
|
feedparser==5.1.3
|
||||||
|
gdata==2.0.18
|
||||||
|
gevent==1.0.1
|
||||||
|
greenlet==0.4.2
|
||||||
|
lxml==3.3.5
|
||||||
|
mock==1.0.1
|
||||||
|
passlib==1.6.2
|
||||||
|
psutil==2.1.1
|
||||||
|
psycogreen==1.0
|
||||||
|
psycopg2==2.5.3
|
||||||
|
pyPdf==1.13
|
||||||
|
pydot==1.0.2
|
||||||
|
pyparsing==1.5.7
|
||||||
|
pyserial==2.7
|
||||||
|
python-dateutil==1.5
|
||||||
|
python-ldap==2.4.15
|
||||||
|
python-openid==2.2.5
|
||||||
|
python-stdnum==0.9
|
||||||
|
pytz==2014.4
|
||||||
|
pyusb==1.0.0b1
|
||||||
|
qrcode==5.0.1
|
||||||
|
reportlab==3.1.8
|
||||||
|
requests==2.3.0
|
||||||
|
simplejson==3.5.3
|
||||||
|
six==1.7.3
|
||||||
|
unittest2==0.5.1
|
||||||
|
vatnumber==1.2
|
||||||
|
vobject==0.6.6
|
||||||
|
wsgiref==0.1.2
|
||||||
|
xlwt==0.7.5
|
241
setup.py
241
setup.py
|
@ -1,167 +1,133 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
##############################################################################
|
|
||||||
#
|
|
||||||
# OpenERP, Open Source Management Solution
|
|
||||||
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
|
|
||||||
#
|
|
||||||
# This program is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU Affero General Public License as
|
|
||||||
# published by the Free Software Foundation, either version 3 of the
|
|
||||||
# License, or (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU Affero General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU Affero General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
#
|
|
||||||
##############################################################################
|
|
||||||
|
|
||||||
import glob, os, re, setuptools, sys
|
import os
|
||||||
from os.path import join
|
import re
|
||||||
|
from glob import glob
|
||||||
|
from setuptools import find_packages, setup
|
||||||
|
from os.path import join, dirname
|
||||||
|
|
||||||
|
|
||||||
|
execfile(join(dirname(__file__), 'openerp', 'release.py')) # Load release variables
|
||||||
|
lib_name = 'openerp'
|
||||||
|
|
||||||
|
|
||||||
|
def py2exe_datafiles():
|
||||||
|
data_files = {}
|
||||||
|
data_files['Microsoft.VC90.CRT'] = glob('C:\Microsoft.VC90.CRT\*.*')
|
||||||
|
|
||||||
# List all data files
|
|
||||||
def data():
|
|
||||||
r = {}
|
|
||||||
for root, dirnames, filenames in os.walk('openerp'):
|
for root, dirnames, filenames in os.walk('openerp'):
|
||||||
for filename in filenames:
|
for filename in filenames:
|
||||||
if not re.match(r'.*(\.pyc|\.pyo|\~)$', filename):
|
if not re.match(r'.*(\.pyc|\.pyo|\~)$', filename):
|
||||||
r.setdefault(root, []).append(os.path.join(root, filename))
|
data_files.setdefault(root, []).append(join(root, filename))
|
||||||
|
|
||||||
if os.name == 'nt':
|
|
||||||
r["Microsoft.VC90.CRT"] = glob.glob('C:\Microsoft.VC90.CRT\*.*')
|
|
||||||
|
|
||||||
import babel
|
import babel
|
||||||
# Add data, but also some .py files py2exe won't include automatically.
|
data_files['babel/localedata'] = glob(join(dirname(babel.__file__), 'localedata', '*'))
|
||||||
# TODO This should probably go under `packages`, instead of `data`,
|
|
||||||
# but this will work fine (especially since we don't use the ZIP file
|
|
||||||
# approach).
|
|
||||||
r["babel/localedata"] = glob.glob(os.path.join(os.path.dirname(babel.__file__), "localedata", '*'))
|
|
||||||
others = ['global.dat', 'numbers.py', 'support.py', 'plural.py']
|
others = ['global.dat', 'numbers.py', 'support.py', 'plural.py']
|
||||||
r["babel"] = map(lambda f: os.path.join(os.path.dirname(babel.__file__), f), others)
|
data_files['babel'] = map(lambda f: join(dirname(babel.__file__), f), others)
|
||||||
others = ['frontend.py', 'mofile.py']
|
others = ['frontend.py', 'mofile.py']
|
||||||
r["babel/messages"] = map(lambda f: os.path.join(os.path.dirname(babel.__file__), "messages", f), others)
|
data_files['babel/messages'] = map(lambda f: join(dirname(babel.__file__), 'messages', f), others)
|
||||||
|
|
||||||
import pytz
|
import pytz
|
||||||
tzdir = os.path.dirname(pytz.__file__)
|
tzdir = dirname(pytz.__file__)
|
||||||
for root, _, filenames in os.walk(os.path.join(tzdir, "zoneinfo")):
|
for root, _, filenames in os.walk(join(tzdir, 'zoneinfo')):
|
||||||
base = os.path.join('pytz', root[len(tzdir) + 1:])
|
base = join('pytz', root[len(tzdir) + 1:])
|
||||||
r[base] = [os.path.join(root, f) for f in filenames]
|
data_files[base] = [join(root, f) for f in filenames]
|
||||||
|
|
||||||
import docutils
|
import docutils
|
||||||
dudir = os.path.dirname(docutils.__file__)
|
dudir = dirname(docutils.__file__)
|
||||||
for root, _, filenames in os.walk(dudir):
|
for root, _, filenames in os.walk(dudir):
|
||||||
base = os.path.join('docutils', root[len(dudir) + 1:])
|
base = join('docutils', root[len(dudir) + 1:])
|
||||||
r[base] = [os.path.join(root, f) for f in filenames if not f.endswith(('.py', '.pyc', '.pyo'))]
|
data_files[base] = [join(root, f) for f in filenames if not f.endswith(('.py', '.pyc', '.pyo'))]
|
||||||
|
|
||||||
return r.items()
|
return data_files.items()
|
||||||
|
|
||||||
def gen_manifest():
|
|
||||||
file_list="\n".join(data())
|
|
||||||
open('MANIFEST','w').write(file_list)
|
|
||||||
|
|
||||||
if os.name == 'nt':
|
|
||||||
sys.path.append("C:\Microsoft.VC90.CRT")
|
|
||||||
|
|
||||||
def py2exe_options():
|
def py2exe_options():
|
||||||
if os.name == 'nt':
|
if os.name == 'nt':
|
||||||
import py2exe
|
import py2exe
|
||||||
return {
|
return {
|
||||||
"console" : [ { "script": "openerp-server", "icon_resources": [(1, join("install","openerp-icon.ico"))], },
|
'console': [
|
||||||
{ "script": "openerp-gevent" },
|
{'script': 'odoo.py'},
|
||||||
{ "script": "odoo.py" },
|
{'script': 'openerp-gevent'},
|
||||||
|
{'script': 'openerp-server', 'icon_resources': [
|
||||||
|
(1, join('setup', 'win32', 'static', 'pixmaps', 'openerp-icon.ico'))
|
||||||
|
]},
|
||||||
],
|
],
|
||||||
'options' : {
|
'options': {
|
||||||
"py2exe": {
|
'py2exe': {
|
||||||
"skip_archive": 1,
|
'skip_archive': 1,
|
||||||
"optimize": 0, # keep the assert running, because the integrated tests rely on them.
|
'optimize': 0, # Keep the assert running as the integrated tests rely on them.
|
||||||
"dist_dir": 'dist',
|
'dist_dir': 'dist',
|
||||||
"packages": [
|
'packages': [
|
||||||
"HTMLParser",
|
'asynchat', 'asyncore',
|
||||||
"PIL",
|
'commands',
|
||||||
"asynchat", "asyncore",
|
'dateutil',
|
||||||
"commands",
|
'decimal',
|
||||||
"dateutil",
|
'decorator',
|
||||||
"decimal",
|
'docutils',
|
||||||
"decorator",
|
'email',
|
||||||
"docutils",
|
'encodings',
|
||||||
"email",
|
'HTMLParser',
|
||||||
"encodings",
|
'imaplib',
|
||||||
"imaplib",
|
'jinja2',
|
||||||
"jinja2",
|
'lxml', 'lxml._elementpath', 'lxml.builder', 'lxml.etree', 'lxml.objectify',
|
||||||
"lxml", "lxml._elementpath", "lxml.builder", "lxml.etree", "lxml.objectify",
|
'mako',
|
||||||
"mako",
|
'markupsafe',
|
||||||
"markupsafe", # dependence of jinja2 and mako
|
'mock',
|
||||||
"mock",
|
'openerp',
|
||||||
"openerp",
|
'openid',
|
||||||
"passlib",
|
'PIL',
|
||||||
"poplib",
|
'poplib',
|
||||||
"psutil",
|
'psutil',
|
||||||
"pychart",
|
'pychart',
|
||||||
"pydot",
|
'pydot',
|
||||||
"pyparsing",
|
'pyparsing',
|
||||||
"pytz",
|
'pyPdf',
|
||||||
"reportlab",
|
'pytz',
|
||||||
"requests",
|
'reportlab',
|
||||||
"select",
|
'requests',
|
||||||
"simplejson",
|
'select',
|
||||||
"smtplib",
|
'simplejson',
|
||||||
"uuid",
|
'smtplib',
|
||||||
"vatnumber",
|
'uuid',
|
||||||
"vobject",
|
'vatnumber',
|
||||||
"win32service", "win32serviceutil",
|
'vobject',
|
||||||
"xlwt",
|
'win32service', 'win32serviceutil',
|
||||||
"xml", "xml.dom",
|
'xlwt',
|
||||||
"yaml",
|
'xml', 'xml.dom',
|
||||||
|
'yaml',
|
||||||
],
|
],
|
||||||
"excludes" : ["Tkconstants","Tkinter","tcl"],
|
'excludes': ['Tkconstants', 'Tkinter', 'tcl'],
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
'data_files': py2exe_datafiles()
|
||||||
}
|
}
|
||||||
else:
|
else:
|
||||||
return {}
|
return {}
|
||||||
|
|
||||||
execfile(join(os.path.dirname(__file__), 'openerp', 'release.py'))
|
|
||||||
|
|
||||||
# Notes for OpenERP developer on windows:
|
setup(
|
||||||
#
|
name='openerp',
|
||||||
# To setup a windows developer evironement install python2.7 then pip and use
|
version=version,
|
||||||
# "pip install <depencey>" for every dependency listed below.
|
description=description,
|
||||||
#
|
long_description=long_desc,
|
||||||
# Dependecies that requires DLLs are not installable with pip install, for
|
url=url,
|
||||||
# them we added comments with links where you can find the installers.
|
author=author,
|
||||||
#
|
author_email=author_email,
|
||||||
# OpenERP on windows also require the pywin32, the binary can be found at
|
classifiers=filter(None, classifiers.split('\n')),
|
||||||
# http://pywin32.sf.net
|
license=license,
|
||||||
#
|
scripts=['openerp-server', 'openerp-gevent', 'odoo.py'],
|
||||||
# Both python2.7 32bits and 64bits are known to work.
|
packages=find_packages(),
|
||||||
|
package_dir={'%s' % lib_name: 'openerp'},
|
||||||
setuptools.setup(
|
include_package_data=True,
|
||||||
name = 'openerp',
|
dependency_links=['http://download.gna.org/pychart/'],
|
||||||
version = version,
|
install_requires=[
|
||||||
description = description,
|
|
||||||
long_description = long_desc,
|
|
||||||
url = url,
|
|
||||||
author = author,
|
|
||||||
author_email = author_email,
|
|
||||||
classifiers = filter(None, classifiers.split("\n")),
|
|
||||||
license = license,
|
|
||||||
scripts = ['openerp-server', 'openerp-gevent', 'odoo.py'],
|
|
||||||
data_files = data(),
|
|
||||||
packages = setuptools.find_packages(),
|
|
||||||
dependency_links = ['http://download.gna.org/pychart/'],
|
|
||||||
#include_package_data = True,
|
|
||||||
install_requires = [
|
|
||||||
'pychart', # not on pypi, use: pip install http://download.gna.org/pychart/PyChart-1.39.tar.gz
|
|
||||||
'babel >= 1.0',
|
'babel >= 1.0',
|
||||||
'decorator',
|
'decorator',
|
||||||
'docutils',
|
'docutils',
|
||||||
'feedparser',
|
'feedparser',
|
||||||
'gdata',
|
|
||||||
'gevent',
|
'gevent',
|
||||||
'psycogreen',
|
|
||||||
'Jinja2',
|
'Jinja2',
|
||||||
'lxml', # windows binary http://www.lfd.uci.edu/~gohlke/pythonlibs/
|
'lxml', # windows binary http://www.lfd.uci.edu/~gohlke/pythonlibs/
|
||||||
'mako',
|
'mako',
|
||||||
|
@ -169,11 +135,14 @@ setuptools.setup(
|
||||||
'passlib',
|
'passlib',
|
||||||
'pillow', # windows binary http://www.lfd.uci.edu/~gohlke/pythonlibs/
|
'pillow', # windows binary http://www.lfd.uci.edu/~gohlke/pythonlibs/
|
||||||
'psutil', # windows binary code.google.com/p/psutil/downloads/list
|
'psutil', # windows binary code.google.com/p/psutil/downloads/list
|
||||||
|
'psycogreen',
|
||||||
'psycopg2 >= 2.2',
|
'psycopg2 >= 2.2',
|
||||||
|
'pychart', # not on pypi, use: pip install http://download.gna.org/pychart/PyChart-1.39.tar.gz
|
||||||
'pydot',
|
'pydot',
|
||||||
'pyparsing < 2',
|
'pyparsing < 2',
|
||||||
|
'pypdf',
|
||||||
'pyserial',
|
'pyserial',
|
||||||
'python-dateutil < 2',
|
'python-dateutil',
|
||||||
'python-ldap', # optional
|
'python-ldap', # optional
|
||||||
'python-openid',
|
'python-openid',
|
||||||
'pytz',
|
'pytz',
|
||||||
|
@ -189,12 +158,12 @@ setuptools.setup(
|
||||||
'werkzeug',
|
'werkzeug',
|
||||||
'xlwt',
|
'xlwt',
|
||||||
],
|
],
|
||||||
extras_require = {
|
extras_require={
|
||||||
'SSL' : ['pyopenssl'],
|
'SSL': ['pyopenssl'],
|
||||||
},
|
},
|
||||||
tests_require = ['unittest2', 'mock'],
|
tests_require=[
|
||||||
|
'unittest2',
|
||||||
|
'mock',
|
||||||
|
],
|
||||||
**py2exe_options()
|
**py2exe_options()
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
||||||
|
|
Loading…
Reference in New Issue