Skip to content

gh-104773: PEP 594: Remove the crypt module #104908

New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Merged
merged 1 commit into from
May 25, 2023
Merged

Conversation

vstinner
Copy link
Member

@vstinner vstinner commented May 24, 2023

Remove the crypt module and its private _crypt extension, deprecated in Python 3.11.


📚 Documentation preview 📚: https://cpython-previews--104908.org.readthedocs.build/

@vstinner
Copy link
Member Author

Using ^\s*(import crypt\b|from crypt\b) regex, I found the following PyPI top 5,000 projects using the removed crypt module.

Affected projects (8):

  • Django (4.2)
  • Twisted (22.10.0)
  • ansible (7.4.0)
  • ansible-core (2.14.4)
  • htpasswd (2.3)
  • passlib (1.7.4)
  • pyftpdlib (1.5.7)
  • pytest-testinfra (7.0.0)
Code:
Django-4.2/tests/auth_tests/test_hashers.py: import crypt
ansible-7.4.0/ansible_collections/community/general/plugins/modules/homectl.py: import crypt
ansible-7.4.0/ansible_collections/community/general/plugins/modules/udm_user.py: import crypt
Twisted-22.10.0/src/twisted/conch/test/test_checkers.py: import crypt
Twisted-22.10.0/src/twisted/cred/test/test_cred.py: from crypt import crypt as _crypt
Twisted-22.10.0/src/twisted/plugins/cred_unix.py: import crypt
ansible-core-2.14.4/lib/ansible/utils/encrypt.py: import crypt
passlib-1.7.4/passlib/tests/utils.py: from crypt import crypt
passlib-1.7.4/passlib/utils/__init__.py: from crypt import crypt as _crypt
pyftpdlib-1.5.7/pyftpdlib/authorizers.py: import crypt
pytest-testinfra-7.0.0/test/test_modules.py: import crypt
htpasswd-2.3/htpasswd/basic.py: from crypt import crypt

@vstinner
Copy link
Member Author

passlib (1.7.4)

It's interesting that the proposed replacement for the removed crypt module actually uses crypt internally (in /passlib/utils/__init__.py) :-)

@hugovk
Copy link
Member

hugovk commented May 25, 2023

Are these bits still needed?

Lib/ctypes/util.py
366:            print(f"crypt\t:: {find_library('crypt')}")
367:            print(f"crypt\t:: {cdll.LoadLibrary(find_library('crypt'))}")
373:            print(find_library("crypt"))

Remove the crypt module and its private _crypt extension, deprecated
in Python 3.11.
@vstinner
Copy link
Member Author

Are these bits still needed?

IMO we should keep it. I saw this test in ctypes. I don't see any direct relationship with the Python crypt module. It's just a test to load a dynamic library which is commonly available on Unix.

@corona10
Copy link
Member

image

@vstinner vstinner merged commit e4127ea into python:main May 25, 2023
@vstinner vstinner deleted the remove_crypt branch May 25, 2023 13:47
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants