Reputation: 1208
With the latest version of setuptools, the python setup.py install
command is being deprecated (see https://blog.ganssle.io/articles/2021/10/setup-py-deprecated.html for more info).
(venv) [jon@dev02 py38]$ python setup.py install
running install
/home/jon/.jenkins/workspace/Farm_revision_linux_py36/TOXENV/py38/venv/lib64/python3.8/site-
packages/setuptools/command/install.py:34: SetuptoolsDeprecationWarning: setup.py install is
deprecated. Use build and pip and other standards-based tools.
warnings.warn(
/home/jon/.jenkins/workspace/Farm_revision_linux_py36/TOXENV/py38/venv/lib64/python3.8/site-
packages/setuptools/command/easy_install.py:156: EasyInstallDeprecationWarning: easy_install
command is deprecated. Use build and pip and other standards-based tools.
warnings.warn(
running bdist_egg
running egg_info
... etc
It is suggested that you can just pip install .
to install a package from source, but this does not compile any Cython code. What is the best method for doing this?
The Cython docs are still recommending use of setup.py
and I can't find any better suggestions. It appears that a developer install (pip install -e .
) does compile the Cython files, or you can python setup.py build_ext --inplace
after running pip install .
. Neither of these options are ideal, so I would like to know if there is a suggested alternative.
EDIT:
The package setup.py file contains this code, which should compile the Cython files:
try:
import numpy
from Cython.Build import cythonize
cython_files = ["farm/rasters/water_fill.pyx"]
cython_def = cythonize(cython_files, annotate=True,
compiler_directives={'language_level': str(sys.version_info.major)})
include_dirs = [numpy.get_include()]
except ImportError:
cython_def = None
include_dirs = None
When installing with python setup.py install
, the farm/rasters directory contains the following files:
water_fill.c
water_fill.cpython-38-x86_64-linux-gnu.so
water_fill.html
water_fill.pyx
When installing with pip install .
, the directory does not contain the .so file and when we try and run water_fill tests, we get errors like this
________________________________ TestFlowDown1D.test_distribute_1d_trough_partial_3 _________________________________
farm/rasters/tests/test_flood_enhance.py:241: in test_distribute_1d_trough_partial_3
actual_arr = water_fill.water_fill_1d(arr, additional_value)
E AttributeError: 'NoneType' object has no attribute 'water_fill_1d'
Upvotes: 25
Views: 19772
Reputation: 158
I believe the warning should go away if you keep the setup.py
but add a pyproject.toml
.
This is described in https://cython.readthedocs.io/en/latest/src/userguide/source_files_and_compilation.html .
Here is the example pyproject.toml
file they give:
[build-system]
requires = ["setuptools", "wheel", "Cython"]
Upvotes: 4