Description
Describe the bug
Installing pvlib 0.9.0 using the wheel currently on PyPI does not install dataclasses, causing pvlib to fail to import on python 3.6. I think this is because the wheel builder workflow uses python 3.8, so it ignores the dataclasses dependency when building the wheel (which is supposed to be universal across all our supported python versions):
Lines 49 to 50 in 518cc35
Opening the wheel (it's just a zipfile) and viewing the pvlib-0.9.0.dist-info/METADATA
file, there is no mention of dataclasses. Note that installing 0.9.0 from source (pip install pvlib --no-binary pvlib
) works as intended because it is running setup.py locally in python 3.6. Our CI never has this kind of python version mismatch between what was used to build the wheel and what was used to run the tests, so it didn't catch this.
To Reproduce
$ conda create -n py36test python=3.6
$ conda activate py36test
$ pip install pvlib==0.9.0
$ python -c "import pvlib"
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "C:\Users\KANDERSO\Software\Anaconda3\envs\py36test\lib\site-packages\pvlib\__init__.py", line 3, in <module>
from pvlib import ( # noqa: F401
File "C:\Users\KANDERSO\Software\Anaconda3\envs\py36test\lib\site-packages\pvlib\ivtools\__init__.py", line 7, in <module>
from pvlib.ivtools import sde, sdm, utils # noqa: F401
File "C:\Users\KANDERSO\Software\Anaconda3\envs\py36test\lib\site-packages\pvlib\ivtools\sdm.py", line 16, in <module>
from pvlib.pvsystem import calcparams_pvsyst, singlediode, v_from_i
File "C:\Users\KANDERSO\Software\Anaconda3\envs\py36test\lib\site-packages\pvlib\pvsystem.py", line 14, in <module>
from dataclasses import dataclass
ModuleNotFoundError: No module named 'dataclasses'
Additional context
Noticed in NREL/rdtools#290
Possible solutions:
- Switch the deploy workflow to use python 3.6, which will end up requiring
dataclasses
for all python versions - Upgrade
dataclasses
to be required for all versions insetup.py
- Build separate wheels for each python version, maybe with cibuildwheel?
- Remove the wheel file so that pip always installs from source?