|
@@ -1,7 +1,7 @@
|
|
|
from __future__ import print_function
|
|
|
|
|
|
import distutils.spawn
|
|
|
-import os.path
|
|
|
+import re
|
|
|
from setuptools import find_packages
|
|
|
from setuptools import setup
|
|
|
import shlex
|
|
@@ -9,90 +9,70 @@ import subprocess
|
|
|
import sys
|
|
|
|
|
|
|
|
|
-PY3 = sys.version_info[0] == 3
|
|
|
-PY2 = sys.version_info[0] == 2
|
|
|
-assert PY3 or PY2
|
|
|
-
|
|
|
-
|
|
|
-here = os.path.abspath(os.path.dirname(__file__))
|
|
|
-version_file = os.path.join(here, 'labelme', '_version.py')
|
|
|
-if PY3:
|
|
|
- import importlib
|
|
|
- version = importlib.machinery.SourceFileLoader(
|
|
|
- '_version', version_file
|
|
|
- ).load_module().__version__
|
|
|
-else:
|
|
|
- assert PY2
|
|
|
- import imp
|
|
|
- version = imp.load_source('_version', version_file).__version__
|
|
|
-del here
|
|
|
-
|
|
|
-
|
|
|
-install_requires = [
|
|
|
- 'imgviz>=0.10.2',
|
|
|
- 'matplotlib',
|
|
|
- 'numpy',
|
|
|
- 'Pillow>=2.8.0',
|
|
|
- 'PyYAML',
|
|
|
- 'qtpy',
|
|
|
- 'termcolor',
|
|
|
-]
|
|
|
-
|
|
|
-# Find python binding for qt with priority:
|
|
|
-# PyQt5 -> PySide2 -> PyQt4,
|
|
|
-# and PyQt5 is automatically installed on Python3.
|
|
|
-QT_BINDING = None
|
|
|
-
|
|
|
-try:
|
|
|
- import PyQt5 # NOQA
|
|
|
- QT_BINDING = 'pyqt5'
|
|
|
-except ImportError:
|
|
|
- pass
|
|
|
-
|
|
|
-if QT_BINDING is None:
|
|
|
- try:
|
|
|
- import PySide2 # NOQA
|
|
|
- QT_BINDING = 'pyside2'
|
|
|
- except ImportError:
|
|
|
- pass
|
|
|
+def get_version():
|
|
|
+ filename = 'labelme/__init__.py'
|
|
|
+ with open(filename) as f:
|
|
|
+ match = re.search(
|
|
|
+ r'''^__version__ = ['"]([^'"]*)['"]''', f.read(), re.M
|
|
|
+ )
|
|
|
+ if not match:
|
|
|
+ raise RuntimeError("{} doesn't contain __version__".format(filename))
|
|
|
+ version = match.groups()[0]
|
|
|
+ return version
|
|
|
+
|
|
|
+
|
|
|
+def get_install_requires():
|
|
|
+ PY3 = sys.version_info[0] == 3
|
|
|
+ PY2 = sys.version_info[0] == 2
|
|
|
+ assert PY3 or PY2
|
|
|
+
|
|
|
+ install_requires = [
|
|
|
+ 'imgviz>=0.10.2',
|
|
|
+ 'matplotlib',
|
|
|
+ 'numpy',
|
|
|
+ 'Pillow>=2.8.0',
|
|
|
+ 'PyYAML',
|
|
|
+ 'qtpy',
|
|
|
+ 'termcolor',
|
|
|
+ ]
|
|
|
+
|
|
|
+ # Find python binding for qt with priority:
|
|
|
+ # PyQt5 -> PySide2 -> PyQt4,
|
|
|
+ # and PyQt5 is automatically installed on Python3.
|
|
|
+ QT_BINDING = None
|
|
|
|
|
|
-if QT_BINDING is None:
|
|
|
try:
|
|
|
- import PyQt4 # NOQA
|
|
|
- QT_BINDING = 'pyqt4'
|
|
|
- except ImportError:
|
|
|
- if PY2:
|
|
|
- print(
|
|
|
- 'Please install PyQt5, PySide2 or PyQt4 for Python2.\n'
|
|
|
- 'Note that PyQt5 can be installed via pip for Python3.',
|
|
|
- file=sys.stderr,
|
|
|
- )
|
|
|
- sys.exit(1)
|
|
|
- assert PY3
|
|
|
- # PyQt5 can be installed via pip for Python3
|
|
|
- install_requires.append('PyQt5')
|
|
|
+ import PyQt5 # NOQA
|
|
|
QT_BINDING = 'pyqt5'
|
|
|
-del QT_BINDING
|
|
|
-
|
|
|
+ except ImportError:
|
|
|
+ pass
|
|
|
|
|
|
-if sys.argv[1] == 'release':
|
|
|
- if not distutils.spawn.find_executable('twine'):
|
|
|
- print(
|
|
|
- 'Please install twine:\n\n\tpip install twine\n',
|
|
|
- file=sys.stderr,
|
|
|
- )
|
|
|
- sys.exit(1)
|
|
|
-
|
|
|
- commands = [
|
|
|
- 'python tests/docs_tests/man_tests/test_labelme_1.py',
|
|
|
- 'git tag v{:s}'.format(version),
|
|
|
- 'git push origin master --tag',
|
|
|
- 'python setup.py sdist',
|
|
|
- 'twine upload dist/labelme-{:s}.tar.gz'.format(version),
|
|
|
- ]
|
|
|
- for cmd in commands:
|
|
|
- subprocess.check_call(shlex.split(cmd))
|
|
|
- sys.exit(0)
|
|
|
+ if QT_BINDING is None:
|
|
|
+ try:
|
|
|
+ import PySide2 # NOQA
|
|
|
+ QT_BINDING = 'pyside2'
|
|
|
+ except ImportError:
|
|
|
+ pass
|
|
|
+
|
|
|
+ if QT_BINDING is None:
|
|
|
+ try:
|
|
|
+ import PyQt4 # NOQA
|
|
|
+ QT_BINDING = 'pyqt4'
|
|
|
+ except ImportError:
|
|
|
+ if PY2:
|
|
|
+ print(
|
|
|
+ 'Please install PyQt5, PySide2 or PyQt4 for Python2.\n'
|
|
|
+ 'Note that PyQt5 can be installed via pip for Python3.',
|
|
|
+ file=sys.stderr,
|
|
|
+ )
|
|
|
+ sys.exit(1)
|
|
|
+ assert PY3
|
|
|
+ # PyQt5 can be installed via pip for Python3
|
|
|
+ install_requires.append('PyQt5')
|
|
|
+ QT_BINDING = 'pyqt5'
|
|
|
+ del QT_BINDING
|
|
|
+
|
|
|
+ return install_requires
|
|
|
|
|
|
|
|
|
def get_long_description():
|
|
@@ -107,40 +87,66 @@ def get_long_description():
|
|
|
return long_description
|
|
|
|
|
|
|
|
|
-setup(
|
|
|
- name='labelme',
|
|
|
- version=version,
|
|
|
- packages=find_packages(),
|
|
|
- description='Image Polygonal Annotation with Python',
|
|
|
- long_description=get_long_description(),
|
|
|
- long_description_content_type='text/markdown',
|
|
|
- author='Kentaro Wada',
|
|
|
- author_email='www.kentaro.wada@gmail.com',
|
|
|
- url='https://github.com/wkentaro/labelme',
|
|
|
- install_requires=install_requires,
|
|
|
- license='GPLv3',
|
|
|
- keywords='Image Annotation, Machine Learning',
|
|
|
- classifiers=[
|
|
|
- 'Development Status :: 5 - Production/Stable',
|
|
|
- 'Intended Audience :: Developers',
|
|
|
- 'Natural Language :: English',
|
|
|
- 'Programming Language :: Python',
|
|
|
- 'Programming Language :: Python :: 2.7',
|
|
|
- 'Programming Language :: Python :: 3.5',
|
|
|
- 'Programming Language :: Python :: 3.6',
|
|
|
- 'Programming Language :: Python :: 3.7',
|
|
|
- 'Programming Language :: Python :: Implementation :: CPython',
|
|
|
- 'Programming Language :: Python :: Implementation :: PyPy',
|
|
|
- ],
|
|
|
- package_data={'labelme': ['icons/*', 'config/*.yaml']},
|
|
|
- entry_points={
|
|
|
- 'console_scripts': [
|
|
|
- 'labelme=labelme.__main__:main',
|
|
|
- 'labelme_draw_json=labelme.cli.draw_json:main',
|
|
|
- 'labelme_draw_label_png=labelme.cli.draw_label_png:main',
|
|
|
- 'labelme_json_to_dataset=labelme.cli.json_to_dataset:main',
|
|
|
- 'labelme_on_docker=labelme.cli.on_docker:main',
|
|
|
+def main():
|
|
|
+ version = get_version()
|
|
|
+
|
|
|
+ if sys.argv[1] == 'release':
|
|
|
+ if not distutils.spawn.find_executable('twine'):
|
|
|
+ print(
|
|
|
+ 'Please install twine:\n\n\tpip install twine\n',
|
|
|
+ file=sys.stderr,
|
|
|
+ )
|
|
|
+ sys.exit(1)
|
|
|
+
|
|
|
+ commands = [
|
|
|
+ 'python tests/docs_tests/man_tests/test_labelme_1.py',
|
|
|
+ 'git tag v{:s}'.format(version),
|
|
|
+ 'git push origin master --tag',
|
|
|
+ 'python setup.py sdist',
|
|
|
+ 'twine upload dist/labelme-{:s}.tar.gz'.format(version),
|
|
|
+ ]
|
|
|
+ for cmd in commands:
|
|
|
+ subprocess.check_call(shlex.split(cmd))
|
|
|
+ sys.exit(0)
|
|
|
+
|
|
|
+ setup(
|
|
|
+ name='labelme',
|
|
|
+ version=version,
|
|
|
+ packages=find_packages(),
|
|
|
+ description='Image Polygonal Annotation with Python',
|
|
|
+ long_description=get_long_description(),
|
|
|
+ long_description_content_type='text/markdown',
|
|
|
+ author='Kentaro Wada',
|
|
|
+ author_email='www.kentaro.wada@gmail.com',
|
|
|
+ url='https://github.com/wkentaro/labelme',
|
|
|
+ install_requires=get_install_requires(),
|
|
|
+ license='GPLv3',
|
|
|
+ keywords='Image Annotation, Machine Learning',
|
|
|
+ classifiers=[
|
|
|
+ 'Development Status :: 5 - Production/Stable',
|
|
|
+ 'Intended Audience :: Developers',
|
|
|
+ 'Natural Language :: English',
|
|
|
+ 'Programming Language :: Python',
|
|
|
+ 'Programming Language :: Python :: 2.7',
|
|
|
+ 'Programming Language :: Python :: 3.5',
|
|
|
+ 'Programming Language :: Python :: 3.6',
|
|
|
+ 'Programming Language :: Python :: 3.7',
|
|
|
+ 'Programming Language :: Python :: Implementation :: CPython',
|
|
|
+ 'Programming Language :: Python :: Implementation :: PyPy',
|
|
|
],
|
|
|
- },
|
|
|
- data_files=[('share/man/man1', ['docs/man/labelme.1'])],
|
|
|
-)
|
|
|
+ package_data={'labelme': ['icons/*', 'config/*.yaml']},
|
|
|
+ entry_points={
|
|
|
+ 'console_scripts': [
|
|
|
+ 'labelme=labelme.__main__:main',
|
|
|
+ 'labelme_draw_json=labelme.cli.draw_json:main',
|
|
|
+ 'labelme_draw_label_png=labelme.cli.draw_label_png:main',
|
|
|
+ 'labelme_json_to_dataset=labelme.cli.json_to_dataset:main',
|
|
|
+ 'labelme_on_docker=labelme.cli.on_docker:main',
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ data_files=[('share/man/man1', ['docs/man/labelme.1'])],
|
|
|
+ )
|
|
|
+
|
|
|
+
|
|
|
+if __name__ == '__main__':
|
|
|
+ main()
|