Skip to content

Commit 16d479e

Browse files
authored
No longer require cython to be pre-installed (pandas-dev#383)
1 parent 6943aa7 commit 16d479e

File tree

3 files changed

+40
-15
lines changed

3 files changed

+40
-15
lines changed

.travis.yml

-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ install:
2222
- pip install python-dateutil --upgrade
2323
- pip install pytz --upgrade
2424
- pip install tzlocal --upgrade
25-
- pip install cython --upgrade
2625
- pip install pymongo --upgrade
2726
- pip install numpy --upgrade
2827
- pip install pandas --upgrade

CHANGES.md

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
### 1.49
44
* Bugfix: #384 sentinels missing time data on chunk start/ends in ChunkStore
5+
* Bugfix: #382 Remove dependency on cython being pre-installed
56

67
### 1.48 (2017-06-26)
78
* BugFix: Rollback #363, as it breaks multi-index dataframe

setup.py

+39-14
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,9 @@
2121
from setuptools.extension import Extension
2222
from setuptools import find_packages
2323
from setuptools.command.test import test as TestCommand
24-
from Cython.Build import cythonize
25-
import sys, os, platform
24+
import sys
25+
import os
26+
import platform
2627

2728

2829
if platform.system().lower() == 'darwin':
@@ -75,15 +76,38 @@ def run_tests(self):
7576
'--cov-report', 'xml',
7677
'--cov-report', 'html',
7778
'--junitxml', 'junit.xml',
78-
])
79+
])
7980
errno = pytest.main(args)
8081
sys.exit(errno)
8182

82-
# Cython lz4
83-
compress = Extension('arctic._compress',
84-
sources=["src/_compress.pyx", "src/lz4.c", "src/lz4hc.c"],
85-
extra_compile_args=['-fopenmp', '-fpermissive'], # Avoid compiling error with prange. Similar to http://stackoverflow.com/questions/36577182/unable-to-assign-value-to-array-in-prange
86-
extra_link_args=['-fopenmp'])
83+
84+
class defer_cythonize(list):
85+
def __init__(self, callback):
86+
self._list, self.callback = None, callback
87+
88+
def c_list(self):
89+
if self._list is None:
90+
self._list = self.callback()
91+
return self._list
92+
93+
def __iter__(self):
94+
for elem in self.c_list():
95+
yield elem
96+
97+
def __getitem__(self, ii):
98+
return self.c_list()[ii]
99+
100+
def __len__(self):
101+
return len(self.c_list())
102+
103+
104+
def extensions():
105+
from Cython.Build import cythonize
106+
return cythonize(Extension('arctic._compress',
107+
sources=["src/_compress.pyx", "src/lz4.c", "src/lz4hc.c"],
108+
extra_compile_args=['-fopenmp', '-fpermissive'], # Avoid compiling error with prange. Similar to http://stackoverflow.com/questions/36577182/unable-to-assign-value-to-array-in-prange
109+
extra_link_args=['-fopenmp']))
110+
87111

88112
setup(
89113
name="arctic",
@@ -97,21 +121,22 @@ def run_tests(self):
97121
packages=find_packages(exclude=['tests', 'tests.*', 'benchmarks']),
98122
long_description='\n'.join((long_description, changelog)),
99123
cmdclass={'test': PyTest},
100-
ext_modules=cythonize(compress),
124+
ext_modules=defer_cythonize(extensions),
101125
setup_requires=["six",
102-
"Cython",
126+
"cython",
103127
"numpy",
104128
"setuptools-git",
105-
],
106-
install_requires=["decorator",
129+
],
130+
install_requires=["cython",
131+
"decorator",
107132
"enum34",
108133
"mockextras",
109134
"pandas",
110135
"pymongo>=3.0",
111136
"python-dateutil",
112137
"pytz",
113138
"tzlocal",
114-
],
139+
],
115140
tests_require=["mock",
116141
"mockextras",
117142
"pytest",
@@ -120,7 +145,7 @@ def run_tests(self):
120145
"pytest-timeout",
121146
"pytest-xdist",
122147
"lz4"
123-
],
148+
],
124149
entry_points={'console_scripts': [
125150
'arctic_init_library = arctic.scripts.arctic_init_library:main',
126151
'arctic_list_libraries = arctic.scripts.arctic_list_libraries:main',

0 commit comments

Comments
 (0)