Python프로그래밍

[python] 파이썬 ImportError: cannot import name ‘long’ from ‘numpy’ 라이브러리 오류: FutureWarning: In the future np.long will be defined as the corresponding NumPy scalar. from numpy import long 오류 해결방법

from numpy import long 모듈이 설치되어 있음에도 불구하고 파이썬 스크립트를 실행시 아래와 같은 오류가 발생했을 때 해결방법을 기록해둔다.

C:\ProgramData\anaconda3\python.exe C:\python\Workspace\main.py 
C:\python\Workspace\main.py:9: FutureWarning: In the future `np.long` will be defined as the corresponding NumPy scalar.
  from numpy import long
Traceback (most recent call last):
  File "C:\python\Workspace\main.py", line 9, in <module>
    from numpy import long
ImportError: cannot import name 'long' from 'numpy' (C:\ProgramData\anaconda3\Lib\site-packages\numpy\__init__.py). Did you mean: 'log'?

Process finished with exit code 1


numpy 설치된 버전 확인하기

C:\ProgramData\anaconda3>python -m pip show numpy
Name: numpy
Version: 1.26.4
Summary: Fundamental package for array computing in Python
Home-page: https://numpy.org
Author: Travis E. Oliphant et al.
Author-email:
License: Copyright (c) 2005-2023, NumPy Developers.
All rights reserved.

1.24.4 버전 부터 numpy.long메소드가 없어져서 사용할 수 없다. Numpy 공식 웹사이트를 보면 1.20부터 지침이 나와 있다. Using the aliases of builtin types like np.int is deprecated

그럼으로 다운그레이드가 필요하다.

버전 다운그레이드를 위해 아래 명령어를 실행하여 버전이 낮은 numpy설치 시도를 하였다.

python -m pip install numpy==1.23.4
python -m pip install numpy==1.19
python -m pip install numpy==1.18.5

해당 버전의 라이브러리에 대해 다운로드는 완료되지만 설치하는 과정에 오류가 발생된다.

그래서 numpy 최신버전 그대로 사용하고 numpy.long 대체하는 numpy.longlong를 사용하여 해결하였다.

AS-IS

from numpy import long

......
    # 3억초과시
    if long(amt) > 300000000:
        calMoney = math.ceil((long(amt) - 300000000) * 0.67 + 234000000)
    elif long(amt) > 2000000: #200만원이하는 비과세
        calMoney = math.ceil(long(amt) * 0.78)
    else:
        calMoney = math.ceil(long(amt))
........

TO-BE

import numpy

............
def make_Money_by_tax(amt):
    calMoney = amt
    # print(calMoney)
    # 3억초과시
    if numpy.longlong(amt) > 300000000:
        calMoney = math.ceil((numpy.longlong(amt) - 300000000) * 0.67 + 234000000)
    elif numpy.longlong(amt) > 2000000: #200만원이하는 비과세
        calMoney = math.ceil(numpy.longlong(amt) * 0.78)
    else:
        calMoney = math.ceil(numpy.longlong(amt))

    bb = format(calMoney, ',d') + '원'
    print(bb)
    return bb

error: Content is protected !!