[py] Python 3.5의 pycrypto 임포트 문제 해결

@codemaru · June 06, 2016 · 2 min read

파이썬에서 암호화를 하려면 pycrypto 라이브러리를 사용하면 된다. pip install pycrypto 하면 문제없이 설치되는데 사용하는데 약간의 문제가 있다. Python 3.5가 설치된 환경에서 pip로 인스톨을 하고 아래와 같이 Random을 임포트 하려면 winrandom을 찾을 수 없다는 오류가 발생한다. 파이썬3로 변경되면서 모듈 포함하는 규칙이 바뀌어서 그런 것 같은데 수정하는 방법은 간단하다.

# c:\Python35>python
# Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:18:55) [MSC v.1900 64 bit (AMD64)] on win32
# Type "help", "copyright", "credits" or "license" for more information.
>>> from Crypto import Random
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "c:\Python35\lib\site-packages\Crypto\Random\__init__.py", line 28, in <m
odule>
    from Crypto.Random import OSRNG
  File "c:\Python35\lib\site-packages\Crypto\Random\OSRNG\__init__.py", line 34,
 in <module>
    from Crypto.Random.OSRNG.nt import new
  File "c:\Python35\lib\site-packages\Crypto\Random\OSRNG\nt.py", line 28, in <m
odule>
    import winrandom
ImportError: No module named 'winrandom'
>>>

우선 문제가 된 위치의 파일을 찾아간다. c:\Python35\lib\site-packages\Crypto\Random\OSRNG\nt.py 이 파일이다. 해당 파일을 열면 아래와 같이 임포트를 하고 있는 것을 볼 수 있다.

import winrandom

위 코드 앞에 "from . "을 붙여주면 된다. 고치면 아래와 같은 코드가 된다. 수정된 내용을 저장하고 다시 임포트시켜 보면 잘 되는 것을 알 수 있다. 배터리는 준비돼 있지만 자질구레하게 손이 가는 곳이 많다. 그래도 배러뤼가 있는게 어딘가?

from . import winrandom
@codemaru
돌아보니 좋은 날도 있었고, 나쁜 날도 있었다. 그런 나의 모든 소소한 일상과 배움을 기록한다. 여기에 기록된 모든 내용은 한 개인의 관점이고 의견이다. 내가 속한 조직과는 1도 상관이 없다.
(C) 2001 YoungJin Shin, 0일째 운영 중