Microsoft MVP성태의 닷넷 이야기
오류 유형: 865. 파이썬 - pymssql 설치 관련 오류 정리 [링크 복사], [링크+제목 복사],
조회: 11970
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
(연관된 글이 2개 있습니다.)

파이썬 - pymssql 설치 관련 오류 정리

원래 설치는 이렇게 끝낼 수 있습니다.

$ python -m pip install pymssql
Defaulting to user installation because normal site-packages is not writeable
Collecting pymssql
  Downloading pymssql-2.2.7-cp311-cp311-manylinux_2_24_x86_64.whl (3.2 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.2/3.2 MB 8.8 MB/s eta 0:00:00
Installing collected packages: pymssql
Successfully installed pymssql-2.2.7




Python 3.8의 경우 2.1.0 ~ 2.1.4 버전을 설치할 때 이런 오류가 발생할 수 있습니다.

# pip install pymssql==2.1.0
Collecting pymssql==2.1.0
  Using cached pymssql-2.1.0.zip (2.5 MB)
  Preparing metadata (setup.py) ... error
  error: subprocess-exited-with-error
  
  × python setup.py egg_info did not run successfully.
  │ exit code: 1
  ╰─> [10 lines of output]
      /usr/local/lib/python3.8/site-packages/setuptools/dist.py:51: DistDeprecationWarning: Do not call this function
        warnings.warn("Do not call this function", DistDeprecationWarning)
      Traceback (most recent call last):
        File "<string>", line 2, in <module>
        File "<pip-setuptools-caller>", line 34, in <module>
        File "/tmp/pip-install-r3vg2u62/pymssql_48a48fb60ec742fca2da191448d9bc72/setup.py", line 131, in <module>
          print("setup.py: platform.linux_distribution() => %r" % (platform.linux_distribution(),))
      AttributeError: module 'platform' has no attribute 'linux_distribution'
      setup.py: platform.system() => 'Linux'
      setup.py: platform.architecture() => ('64bit', 'ELF')
      [end of output]
  
  note: This error originates from a subprocess, and is likely not a problem with pip.
error: metadata-generation-failed

× Encountered error while generating package metadata.
╰─> See above for output.

note: This is an issue with the package mentioned above, not pip.
hint: See above for details.

Python 3.7부터 완전히 삭제된 platform.linux_distribution을 사용하기 때문인데, 2.1.5 버전에서 수정했다고 합니다. 따라서 Python을 3.6 이하로 내리든가, 아니면 pymssql 버전을 2.1.5 이상의 버전을 사용해야 합니다.




파이썬의 버전에 따라 2.0.0 ~ 2.2.0 버전을 설치하는 경우 다음의 문제가 발생한다면?

$ python3.11 -m pip install pymssql==2.2.0
...[생략]...
      x86_64-linux-gnu-gcc -pthread -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -fPIC -I/usr/include/python3.11 -c src/pymssql/_mssql.c -o build/temp.linux-x86_64-cpython-311/src/pymssql/_mssql.o -DMSDBLIB
      src/pymssql/_mssql.c:747:10: fatal error: sqlfront.h: No such file or directory
        747 | #include "sqlfront.h"
            |          ^~~~~~~~~~~~
      compilation terminated.
      error: command '/usr/bin/x86_64-linux-gnu-gcc' failed with exit code 1
      [end of output]

  note: This error originates from a subprocess, and is likely not a problem with pip.
  ERROR: Failed building wheel for pymssql
Failed to build pymssql
ERROR: Could not build wheels for pymssql, which is required to install pyproject.toml-based projects

다행히 해결 방법이 있고,

failed to build: Cannot open include file: 'sqlfront.h': No such file or directory #372
; https://github.com/pymssql/pymssql/issues/372

Ubuntu의 경우, freetds-dev를 다음과 같이 설치하면 됩니다.

$ sudo apt install freetds-dev




마지막으로 2.0.0 버전 이하를 설치하면 아래와 같이 복잡한 오류가 발생하는 경우도 있을 것입니다.

# pip install pymssql==2.0.0
Collecting pymssql==2.0.0
  Using cached pymssql-2.0.0.zip (2.4 MB)
  Preparing metadata (setup.py) ... error
  ERROR: Command errored out with exit status 1:
   command: /usr/local/bin/python -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-o_z_7v5i/pymssql_35aeb37a9a8e46b098a7d5cbf4b78fbb/setup.py'"'"'; __file__='"'"'/tmp/pip-install-o_z_7v5i/pymssql_35aeb37a9a8e46b098a7d5cbf4b78fbb/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-dcnnrk4u
       cwd: /tmp/pip-install-o_z_7v5i/pymssql_35aeb37a9a8e46b098a7d5cbf4b78fbb/
  Complete output (14 lines):
  /usr/local/lib/python3.6/site-packages/setuptools/dist.py:51: DistDeprecationWarning: Do not call this function
    warnings.warn("Do not call this function", DistDeprecationWarning)
  Traceback (most recent call last):
    File "<string>", line 1, in <module>
    File "/tmp/pip-install-o_z_7v5i/pymssql_35aeb37a9a8e46b098a7d5cbf4b78fbb/setup.py", line 412, in <module>
      long_description = open('README.rst').read() +"\n\n" + open('ChangeLog_highlights.rst').read(),
  FileNotFoundError: [Errno 2] No such file or directory: 'ChangeLog_highlights.rst'
  setup.py: platform.system() => 'Linux'
  setup.py: platform.architecture() => ('64bit', 'ELF')
  setup.py: platform.linux_distribution() => ('debian', '10.12', '')
  setup.py: platform.libc_ver() => ('glibc', '2.2.5')
  setup.py: Not using bundled FreeTDS
  setup.py: include_dirs = ['/usr/local/include']
  setup.py: library_dirs = ['/usr/local/lib']
  ----------------------------------------
WARNING: Discarding https://files.pythonhosted.org/packages/43/8a/39276b764d4f57ea1950c600a87c567ab5e1ec70c646390084f9a26ec74e/pymssql-2.0.0.zip#sha256=848341594f399d9cf6dd47663e01403b22ac6cffe80914d10f3b6cc1dd43b8f4 (from https://pypi.org/simple/pymssql/). Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.
  Using cached pymssql-2.0.0.tar.gz (2.4 MB)
  Preparing metadata (setup.py) ... done
Building wheels for collected packages: pymssql
  Building wheel for pymssql (setup.py) ... error
  ERROR: Command errored out with exit status 1:
   command: /usr/local/bin/python -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-o_z_7v5i/pymssql_3da1f94548ef4cc7be30c239703c18ae/setup.py'"'"'; __file__='"'"'/tmp/pip-install-o_z_7v5i/pymssql_3da1f94548ef4cc7be30c239703c18ae/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' bdist_wheel -d /tmp/pip-wheel-rs7um03z
       cwd: /tmp/pip-install-o_z_7v5i/pymssql_3da1f94548ef4cc7be30c239703c18ae/
  Complete output (27 lines):
  /usr/local/lib/python3.6/site-packages/setuptools/dist.py:51: DistDeprecationWarning: Do not call this function
    warnings.warn("Do not call this function", DistDeprecationWarning)
  setup.py: platform.system() => 'Linux'
  setup.py: platform.architecture() => ('64bit', 'ELF')
  setup.py: platform.linux_distribution() => ('debian', '10.12', '')
  setup.py: platform.libc_ver() => ('glibc', '2.2.5')
  setup.py: Not using bundled FreeTDS
  setup.py: include_dirs = ['/usr/local/include']
  setup.py: library_dirs = ['/usr/local/lib']
  running bdist_wheel
  running build
  running build_ext
  building '_mssql' extension
  creating build
  creating build/temp.linux-x86_64-3.6
  gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC -I/usr/local/include -I/usr/local/include/python3.6m -c _mssql.c -o build/temp.linux-x86_64-3.6/_mssql.o -DMSDBLIB
  _mssql.c: In function ‘__pyx_f_6_mssql__tds_ver_str_to_constant’:
  _mssql.c:15426:15: error: ‘DBVERSION_80’ undeclared (first use in this function); did you mean ‘DBVERSION_70’?
       __pyx_r = DBVERSION_80;
                 ^~~~~~~~~~~~
                 DBVERSION_70
  _mssql.c:15426:15: note: each undeclared identifier is reported only once for each function it appears in
  At top level:
  _mssql.c:3331:12: warning: ‘__pyx_f_6_mssql_db_sqlexec’ defined but not used [-Wunused-function]
   static int __pyx_f_6_mssql_db_sqlexec(DBPROCESS *__pyx_v_dbproc) {
              ^~~~~~~~~~~~~~~~~~~~~~~~~~
  error: command 'gcc' failed with exit status 1
  ----------------------------------------
  ERROR: Failed building wheel for pymssql
  Running setup.py clean for pymssql
Failed to build pymssql
Installing collected packages: pymssql
    Running setup.py install for pymssql ... error
    ERROR: Command errored out with exit status 1:
     command: /usr/local/bin/python -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-o_z_7v5i/pymssql_3da1f94548ef4cc7be30c239703c18ae/setup.py'"'"'; __file__='"'"'/tmp/pip-install-o_z_7v5i/pymssql_3da1f94548ef4cc7be30c239703c18ae/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-yql3imw_/install-record.txt --single-version-externally-managed --compile --install-headers /usr/local/include/python3.6m/pymssql
         cwd: /tmp/pip-install-o_z_7v5i/pymssql_3da1f94548ef4cc7be30c239703c18ae/
    Complete output (27 lines):
    /usr/local/lib/python3.6/site-packages/setuptools/dist.py:51: DistDeprecationWarning: Do not call this function
      warnings.warn("Do not call this function", DistDeprecationWarning)
    setup.py: platform.system() => 'Linux'
    setup.py: platform.architecture() => ('64bit', 'ELF')
    setup.py: platform.linux_distribution() => ('debian', '10.12', '')
    setup.py: platform.libc_ver() => ('glibc', '2.2.5')
    setup.py: Not using bundled FreeTDS
    setup.py: include_dirs = ['/usr/local/include']
    setup.py: library_dirs = ['/usr/local/lib']
    running install
    running build
    running build_ext
    building '_mssql' extension
    creating build
    creating build/temp.linux-x86_64-3.6
    gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC -I/usr/local/include -I/usr/local/include/python3.6m -c _mssql.c -o build/temp.linux-x86_64-3.6/_mssql.o -DMSDBLIB
    _mssql.c: In function ‘__pyx_f_6_mssql__tds_ver_str_to_constant’:
    _mssql.c:15426:15: error: ‘DBVERSION_80’ undeclared (first use in this function); did you mean ‘DBVERSION_70’?
         __pyx_r = DBVERSION_80;
                   ^~~~~~~~~~~~
                   DBVERSION_70
    _mssql.c:15426:15: note: each undeclared identifier is reported only once for each function it appears in
    At top level:
    _mssql.c:3331:12: warning: ‘__pyx_f_6_mssql_db_sqlexec’ defined but not used [-Wunused-function]
     static int __pyx_f_6_mssql_db_sqlexec(DBPROCESS *__pyx_v_dbproc) {
                ^~~~~~~~~~~~~~~~~~~~~~~~~~
    error: command 'gcc' failed with exit status 1
    ----------------------------------------
ERROR: Command errored out with exit status 1: /usr/local/bin/python -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-o_z_7v5i/pymssql_3da1f94548ef4cc7be30c239703c18ae/setup.py'"'"'; __file__='"'"'/tmp/pip-install-o_z_7v5i/pymssql_3da1f94548ef4cc7be30c239703c18ae/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-yql3imw_/install-record.txt --single-version-externally-managed --compile --install-headers /usr/local/include/python3.6m/pymssql Check the logs for full command output.

아래의 글에도 나오지만,

pymssql-2.1.3 ‘DBVERSION_80’ undeclared (first use in this function); did you mean ‘DBVERSION_70’? 
; https://github.com/pymssql/pymssql/issues/520

"/usr/include/sybdb.h" 파일의 내용에서 DBVERSION_80 상수를 이런 식으로,

#define DBVERSION_80 DBVERSION_71

추가해 주면 됩니다. 혹은 그냥, 아예 2.1.4 버전을 설치하는 것이 더 좋겠습니다.




근래에는 다음과 같이 krb5 관련 라이브러리가 없다는 에러가 발생할 수 있습니다.

$ python -m pip install pymssql
Collecting pymssql
  Downloading pymssql-2.3.2.tar.gz (184 kB)
 ...[생략]...
 running build_ext
      Compiling src/pymssql/_mssql.pyx because it changed.
      [1/1] Cythonizing src/pymssql/_mssql.pyx
      building 'pymssql._mssql' extension
      creating build/temp.linux-x86_64-cpython-38/src/pymssql
      x86_64-linux-gnu-gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -fPIC -I/usr/local/include -I/home/kevin/py38v/debug_fastapi_router/include -I/usr/include/python3.8 -c src/pymssql/_mssql.c -o build/temp.linux-x86_64-cpython-38/src/pymssql/_mssql.o -DMSDBLIB
      x86_64-linux-gnu-gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions -Wl,-z,relro -g -fwrapv -O2 build/temp.linux-x86_64-cpython-38/src/pymssql/_mssql.o -L/usr/local/lib -L/usr/lib -lsybdb -lgssapi_krb5 -lkrb5 -lssl -lcrypto -o build/lib.linux-x86_64-cpython-38/pymssql/_mssql.cpython-38-x86_64-linux-gnu.so
      /usr/bin/ld: cannot find -lgssapi_krb5
      /usr/bin/ld: cannot find -lkrb5
      collect2: error: ld returned 1 exit status
      /tmp/pip-build-env-7vzsyx13/overlay/lib/python3.8/site-packages/setuptools/_distutils/dist.py:261: UserWarning: Unknown distribution option: 'tests_require'
        warnings.warn(msg)
      error: command '/usr/bin/x86_64-linux-gnu-gcc' failed with exit code 1
      [end of output]

  note: This error originates from a subprocess, and is likely not a problem with pip.
  ERROR: Failed building wheel for pymssql

이런 경우 libkrb5-dev를 함께 설치해 주면 됩니다.

$ sudo apt install libkrb5-dev

또는 이렇게 ssl, crypto 라이브러리를 찾지 못한다면?

      gcc -pthread -shared -Wl,--strip-all build/temp.linux-x86_64-cpython-38/src/pymssql/_mssql.o -L/usr/local/lib -L/usr/local/lib -lsybdb -lgssapi_krb5 -lkrb5 -lssl -lcrypto -o build/lib.linux-x86_64-cpython-38/pymssql/_mssql.cpython-38-x86_64-linux-gnu.so
      /usr/bin/ld: cannot find -lssl
      /usr/bin/ld: cannot find -lcrypto
      collect2: error: ld returned 1 exit status
      /tmp/pip-build-env-0xkuezu9/overlay/lib/python3.8/site-packages/setuptools/_distutils/dist.py:261: UserWarning: Unknown distribution option: 'tests_require'
        warnings.warn(msg)
      error: command '/usr/bin/gcc' failed with exit code 1
      [end of output]
  
  note: This error originates from a subprocess, and is likely not a problem with pip.
  ERROR: Failed building wheel for pymssql
Failed to build pymssql

[notice] A new release of pip is available: 24.3.1 -> 25.0.1
[notice] To update, run: pip install --upgrade pip
ERROR: ERROR: Failed to build installable wheels for some pyproject.toml based projects (pymssql)

libssl-dev만 더 설치하면 됩니다.

$ sudo apt install libssl-dev -y




이후 대략적인 사용법은 아래의 글을 참고하시고. ^^

MSSQL 사용
; http://pythonstudy.xyz/python/article/208-MSSQL-사용




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]






[최초 등록일: ]
[최종 수정일: 2/11/2025]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 136  137  138  139  140  141  142  143  144  145  [146]  147  148  149  150  ...
NoWriterDateCnt.TitleFile(s)
1403정성태1/14/201331979.NET Framework: 357. .NET 4.5의 2GB 힙 한계 극복
1402정성태1/14/201332572오류 유형: 166. SmtpClient.Send 오류 - net_io_connectionclosed
1401정성태1/11/201329884.NET Framework: 356. (공개키를 담은) 자바의 key 파일을 닷넷의 RSACryptoServiceProvider에서 사용하는 방법 [2]파일 다운로드1
1400정성태1/10/201329018Windows: 69. 작업표시줄의 터치 키보드(Touch Keyboard) 없애는 방법 [3]
1399정성태1/9/201324670.NET Framework: 355. 닷넷 환경이 왜 C/C++보다 느릴까요? [8]
1398정성태1/8/201325151오류 유형: 165. 새로 설치한 Visual Studio 2010의 Team Explorer 실행시 비정상 종료가 된다면?
1397정성태1/3/201328625Windows: 68. 윈도우 설치 ISO 이미지를 USB 하드에 적용하는 방법 [2]
1396정성태12/27/201229827사물인터넷: 2. 넷두이노 - 4.2.0 펌웨어 업데이트 방법 [1]파일 다운로드1
1395정성태12/26/201220698.NET Framework: 354. x64 - AspCompat과 STA COM 개체가 성능에 미치는 영향
1394정성태12/25/201222134.NET Framework: 353. x86 - AspCompat과 STA COM 개체가 성능에 미치는 영향
1393정성태12/25/201222496.NET Framework: 352. x64에서 필수로 지정하도록 바뀐 STAThread 특성 [2]
1392정성태12/21/201232505사물인터넷: 1. .NET Micro Framework - 넷두이노 플러스 [7]
1391정성태12/21/201225889.NET Framework: 351. JavaScriptSerializer, DataContractJsonSerializer, Json.NET [3]파일 다운로드1
1390정성태12/20/201223969.NET Framework: 350. String 데이터를 Stream으로 변환하는 방법 [2]
1389정성태12/12/201222285.NET Framework: 349. .NET Thread 인스턴스로부터 COM Apartment 유형 확인하는 방법파일 다운로드1
1388정성태12/12/201223345.NET Framework: 348. .NET x64 응용 프로그램에서 Teb 주소를 구하는 방법파일 다운로드1
1387정성태12/12/201228265VC++: 64. x64 Visual C++에서 TEB 주소 구하는 방법
1386정성태12/12/201229993디버깅 기술: 53. windbg - 덤프 파일로부터 네이티브 DLL을 추출하는 방법 [1]
1385정성태12/12/201225049디버깅 기술: 52. Windbg - The version of SOS does not match the version of CLR you are debugging.
1384정성태12/12/201229868개발 환경 구성: 178. System32 폴더의 64비트 DLL을 32비트 Depends.exe에서 보는 방법
1383정성태12/10/201225788개발 환경 구성: 177. 기업용 메신저를 위한 Office Communicator Server 2007 설치 [1]
1382정성태12/8/201228644개발 환경 구성: 176. WebPagetest 서버 - 설치 및 테스트
1381정성태12/5/201227160.NET Framework: 347. C# - 프로세스(EXE) 수준의 Singleton 개체 생성 [2]파일 다운로드1
1380정성태11/28/201237194.NET Framework: 346. 닷넷 개발자에게 Node.js의 의미 [17]
1379정성태11/26/201230320.NET Framework: 345. C# 부호(+, -)에 대한 비트 변환
1378정성태11/22/201231663Java: 14. 안드로이드 - Hello World 실습 [7]
... 136  137  138  139  140  141  142  143  144  145  [146]  147  148  149  150  ...