Search code examples
pythonopenmpcython

pip install -e . vs setup.py


I have been locally editing (inside a conda env) the package GSTools cloned from the github repo https://github.com/GeoStat-Framework/GSTools, to adapt it to my own purposes. The package is c++ wrapped in python (cython).

I've thus far used pip install -e . in the main package dir for my local changes. But I want to now use their OpenMP support by setting the env variable export GSTOOLS_BUILD_PARALLEL=1 . Then doing pip install -e . I get among other things in the terminal ...

Installing collected packages: gstools
Running setup.py develop for gstools
Successfully installed gstools-1.3.6.dev37

The issue is nothing actually changed because, setup.py (shown below) is supposed to print "OpenMP=True" if the env variable is set to GSTOOLS_BUILD_PARALLEL=1 in the linux terminal , and print something else if its not set to 1.

here is setup.py.

# -*- coding: utf-8 -*-
"""GSTools: A geostatistical toolbox."""
import os
​
import numpy as np
from Cython.Build import cythonize
from extension_helpers import add_openmp_flags_if_available
from setuptools import Extension, setup
​
# cython extensions
CY_MODULES = [
    Extension(
        name=f"gstools.{ext}",
        sources=[os.path.join("src", "gstools", *ext.split(".")) + ".pyx"],
        include_dirs=[np.get_include()],
        define_macros=[("NPY_NO_DEPRECATED_API", "NPY_1_7_API_VERSION")],
    )
    for ext in ["field.summator", "variogram.estimator", "krige.krigesum"]
]
# you can set GSTOOLS_BUILD_PARALLEL=0 or GSTOOLS_BUILD_PARALLEL=1
if int(os.getenv("GSTOOLS_BUILD_PARALLEL", "0")):
    added = [add_openmp_flags_if_available(mod) for mod in CY_MODULES]
    print(f"## GSTools setup: OpenMP used: {any(added)}")
else:
    print("## GSTools setup: OpenMP not wanted by the user.")
​
# setup - do not include package data to ignore .pyx files in wheels
setup(ext_modules=cythonize(CY_MODULES), include_package_data=False)

I tried instead just python setup.py install but that gives

UNKNOWN 0.0.0 is already the active version in easy-install.pth

Installed /global/u1/b/benabou/.conda/envs/healpy_conda_gstools_dev/lib/python3.8/site-packages/UNKNOWN-0.0.0-py3.8-linux-x86_64.egg
Processing dependencies for UNKNOWN==0.0.0
Finished processing dependencies for UNKNOWN==0.0.0

and import gstools

no longer works correctly.

So how can I install my edited version of the package with OpenMP support?


Solution

  • developer of GSTools here.

    I guess you don't see the printed message, because pip is suppressing output for the setup. So you could try making pip verbose with:

    GSTOOLS_BUILD_PARALLEL=1 pip install -v -e .
    

    BTW, we are always interested in enhancements. So maybe you are willing the share your edits on GSTools? :-)

    Cheers, Sebastian