-
Notifications
You must be signed in to change notification settings - Fork 10
/
setup.py
executable file
·120 lines (109 loc) · 4.17 KB
/
setup.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#!/usr/bin/env python
# -*- coding: utf-8 -*-
''' Installation script for nb2plots package '''
import os
from os.path import join as pjoin, split as psplit, splitext
import re
from setuptools import setup
import versioneer
# Get install requirements from requirements.txt file
with open('requirements.txt', 'rt') as fobj:
install_requires = [line.strip() for line in fobj
if line.strip() and not line[0] in '#-']
# Get any extra test requirements
with open('test-requirements.txt', 'rt') as fobj:
test_requires = [line.strip() for line in fobj
if line.strip() and not line[0] in '#-']
# Requires for distutils (only used in pypi interface?)
break_ver = re.compile(r'(\S+?)(\[\S+\])?([=<>!]+\S+)')
requires = [break_ver.sub(r'\1 (\3)', req) for req in install_requires]
# See: https://github.com/matthew-brett/myscripter
from distutils.command.install_scripts import install_scripts
from distutils import log
BAT_TEMPLATE = \
r"""@echo off
REM wrapper to use shebang first line of {FNAME}
set mypath=%~dp0
set pyscript="%mypath%{FNAME}"
set /p line1=<%pyscript%
if "%line1:~0,2%" == "#!" (goto :goodstart)
echo First line of %pyscript% does not start with "#!"
exit /b 1
:goodstart
set py_exe=%line1:~2%
call "%py_exe%" %pyscript% %*
"""
class my_install_scripts(install_scripts):
""" Install .bat wrapper for scripts on Windows """
def run(self):
install_scripts.run(self)
if not os.name == "nt":
return
for filepath in self.get_outputs():
# If we can find an executable name in the #! top line of the
# script file, make .bat wrapper for script.
with open(filepath, 'rt') as fobj:
first_line = fobj.readline()
if not (first_line.startswith('#!') and
'python' in first_line.lower()):
log.info("No #!python executable found, skipping .bat "
"wrapper")
continue
pth, fname = psplit(filepath)
froot, ext = splitext(fname)
bat_file = pjoin(pth, froot + '.bat')
bat_contents = BAT_TEMPLATE.replace('{FNAME}', fname)
log.info("Making %s wrapper for %s" % (bat_file, filepath))
if self.dry_run:
continue
with open(bat_file, 'wt') as fobj:
fobj.write(bat_contents)
cmdclass = versioneer.get_cmdclass()
cmdclass['install_scripts'] = my_install_scripts
setup(name='nb2plots',
version=versioneer.get_version(),
cmdclass=cmdclass,
description='Converting between ipython notebooks and sphinx docs',
author='Matthew Brett',
author_email='[email protected]',
maintainer='Matthew Brett',
maintainer_email='[email protected]',
url='http://github.com/matthew-brett/nb2plots',
packages=['nb2plots',
'nb2plots.tests',
'nb2plots.testing'],
package_data = {'nb2plots': [
'tests/data/*.rst',
'tests/rst_md_files/*',
'tests/data/*',
'tests/proj1/*.rst',
'tests/proj1/*.py',
'tests/proj1/_static/*',
'tests/otherpages/*',
]},
license='BSD license',
classifiers = [
'Development Status :: 2 - Pre-Alpha',
'Environment :: Console',
'Intended Audience :: Developers',
'Intended Audience :: Science/Research',
'License :: OSI Approved :: BSD License',
'Programming Language :: Python',
'Programming Language :: Python :: 3',
'Topic :: Scientific/Engineering',
'Operating System :: Microsoft :: Windows',
'Operating System :: POSIX',
'Operating System :: Unix',
'Operating System :: MacOS',
],
scripts = ['scripts/nb2plots',
'scripts/sphinx2nb',
'scripts/sphinx2py',
'scripts/sphinx2md',
'scripts/sphinx2pxml',
'scripts/rst2md'],
long_description = open('README.rst', 'rt').read(),
install_requires = install_requires,
extras_require = {'test': test_requires},
python_requires='>=3.7',
)