django-compressor / django-appconf

An app to handle configuration defaults of packaged Django apps gracefully
https://django-appconf.readthedocs.io
BSD 3-Clause "New" or "Revised" License
350 stars 47 forks source link

Python 2.7 compatibility bug in version 1.0.4 #59

Closed wsmith323 closed 4 years ago

wsmith323 commented 4 years ago

Version 1.0.4 introduces a Python 2.7 compatibility bug. AFAIK, django-appconf has not officially dropped Python 2.7 support. The PR that introduced the bug is https://github.com/django-compressor/django-appconf/pull/57. The bug is on line 107 of base.py, where the metaclass is declared. The Python 2.7 compatible code (using six) was replaced with code that only works in Python 3.

I have added PR https://github.com/django-compressor/django-appconf/pull/60 to fix it.

Huthayfa-Malhas commented 4 years ago

Thumps up for visibility

carltongibson commented 4 years ago

Sorry, Python 2.7 is no longer supported. (It's EOL.) Please pin to 1.0.3 until you are able to upgrade Python.

carltongibson commented 4 years ago

AFAIK, django-appconf has not officially dropped Python 2.7 support.

Yes, we dropped support, and declared that by removing the appropriate trove classifiers.

Please see the declared support: https://pypi.org/project/django-appconf/

julius88 commented 4 years ago

I think you should update setup.py to require Python 3+ only as mentioned here: https://packaging.python.org/guides/distributing-packages-using-setuptools/#python-requires

Version 1.0.4 is still installable with Python 2 and it shouldn't be.

sshishov commented 4 years ago

Guys, this is not professional at all. You are breaking environments of people who were using your library and still on Python2. And now as a solution, you just advise to pin the version. You SHOULD NOT push python2 incompatible changes to PyPy as py2 wheel then! If you would do it only for py3, then nobody would complain. Please update your version in PyPy and remove py2 wheel.

carltongibson commented 4 years ago

If you folks want to make a PR adjusting the python requires and the wheel setting I can push a new version. You can bump the version to 1.1.0 if that helps you.

Reality is we have folks pushing for declared support on latest versions and we can't check compat with EOL Pythons. TBH If you're using EOL Python you should expect to pin dependencies.

gotgenes commented 4 years ago

PR in #67 removes the classifiers, however, the presence of the 1.0.4 package is going to continue to give Python 2 users grief.

The course of action would be to revert all changes introduced by 1.0.4 and release that as 1.0.5, then revert the revert, apply this PR, and then bump the major version number to 2.0.0 and make a release to declare Python 3 support only.

thoward27 commented 4 years ago

Declare python3 only via python_requires per https://packaging.python.org/guides/dropping-older-python-versions/, not just with classifiers

Going to pin this for now, but django-appconf is not a direct dependency of the project, it's pulled in from other packages. Pinning non-direct dependencies is not ideal.

Vadorequest commented 4 years ago

Same, encountering this issue because django-appconf is a dep of another dep.

Major breaking changes (like v1.0.3 supports python v2 but v1.0.4 doesn't) should have been done in a v2.0.0 instead of v1.0.4, following semantic versioning)

Maybe people upgraded this minor version without knowing it would break on Python 2. It's your responsability to avoid those kinds of things TBH.

hawkofsky commented 4 years ago

My project was built a few years ago and I can't upgrade python version to 3. That leads to many bugs. And django-appconf is not a direct dependency. So how can i pin django-appconf to 1.0.3 and reflect to requirements.txt in order to avoid such errors?

thoward27 commented 4 years ago

@HawkofSky make django-appconf a direct dependency: pip install django-appconf==1.0.3

hawkofsky commented 4 years ago

thanks @thoward27 so can i add django-appconf==1.0.3 to requirements.txt at the end? If so, pip install django-appconf==1.0.3 would remove updated version and install 1.0.3?