Microsoft MVP성태의 닷넷 이야기
오류 유형: 865. 파이썬 - pymssql 설치 관련 오류 정리 [링크 복사], [링크+제목 복사],
조회: 4746
글쓴 사람
정성태 (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 버전을 설치하는 것이 더 좋겠습니다.




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

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




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

[연관 글]






[최초 등록일: ]
[최종 수정일: 8/10/2023]

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

비밀번호

댓글 작성자
 




1  2  3  4  5  [6]  7  8  9  10  11  12  13  14  15  ...
NoWriterDateCnt.TitleFile(s)
13494정성태12/20/20232703Linux: 64. Linux 응용 프로그램의 (C++) so 의존성 줄이기(ReleaseMinDependency) - 두 번째 이야기
13493정성태12/19/20232897닷넷: 2185. C# - object를 QueryString으로 직렬화하는 방법
13492정성태12/19/20232554개발 환경 구성: 699. WSL에 nopCommerce 예제 구성
13491정성태12/19/20232347Linux: 63. 리눅스 - 다중 그룹 또는 사용자를 리소스에 권한 부여
13490정성태12/19/20232494개발 환경 구성: 698. Golang - GLIBC 의존을 없애는 정적 빌드 방법
13489정성태12/19/20232257개발 환경 구성: 697. GoLand에서 ldflags 지정 방법
13488정성태12/18/20232234오류 유형: 884. HTTP 500.0 - 명령행에서 실행한 ASP.NET Core 응용 프로그램을 실행하는 방법
13487정성태12/16/20232521개발 환경 구성: 696. C# - 리눅스용 AOT 빌드를 docker에서 수행 [1]
13486정성태12/15/20232325개발 환경 구성: 695. Nuget config 파일에 값 설정/삭제 방법
13485정성태12/15/20232190오류 유형: 883. dotnet build/restore - error : Root element is missing
13484정성태12/14/20232318개발 환경 구성: 694. Windows 디렉터리 경로를 WSL의 /mnt 포맷으로 구하는 방법
13483정성태12/14/20232467닷넷: 2184. C# - 하나의 resource 파일을 여러 프로그램에서 (AOT 시에도) 사용하는 방법파일 다운로드1
13482정성태12/13/20233149닷넷: 2183. C# - eFriend Expert OCX 예제를 .NET Core/5+ Console App에서 사용하는 방법 [2]파일 다운로드1
13481정성태12/13/20232469개발 환경 구성: 693. msbuild - .NET Core/5+ 프로젝트에서 resgen을 이용한 리소스 파일 생성 방법파일 다운로드1
13480정성태12/12/20232866개발 환경 구성: 692. Windows WSL 2 + Chrome 웹 브라우저 설치
13479정성태12/11/20232506개발 환경 구성: 691. WSL 2 (Ubuntu) + nginx 환경 설정
13477정성태12/8/20232742닷넷: 2182. C# - .NET 7부터 추가된 Int128, UInt128 [1]파일 다운로드1
13476정성태12/8/20232500닷넷: 2181. C# - .NET 8 JsonStringEnumConverter의 AOT를 위한 개선파일 다운로드1
13475정성태12/7/20232575닷넷: 2180. .NET 8 - 함수 포인터에 대한 Reflection 정보 조회파일 다운로드1
13474정성태12/6/20232397개발 환경 구성: 690. 닷넷 코어/5+ 버전의 ilasm/ildasm 실행 파일 구하는 방법 - 두 번째 이야기
13473정성태12/5/20232680닷넷: 2179. C# - 값 형식(Blittable)을 메모리 복사를 이용해 바이트 배열로 직렬화/역직렬화파일 다운로드1
13472정성태12/4/20232327C/C++: 164. Visual C++ - InterlockedCompareExchange128 사용 방법
13471정성태12/4/20232523Copilot - To enable GitHub Copilot, authorize this extension using GitHub's device flow
13470정성태12/2/20232771닷넷: 2178. C# - .NET 8부터 COM Interop에 대한 자동 소스 코드 생성 도입파일 다운로드1
13469정성태12/1/20232619닷넷: 2177. C# - (Interop DLL 없이) CoClass를 이용한 COM 개체 생성 방법파일 다운로드1
13468정성태12/1/20232423닷넷: 2176. C# - .NET Core/5+부터 달라진 RCW(Runtime Callable Wrapper) 대응 방식파일 다운로드1
1  2  3  4  5  [6]  7  8  9  10  11  12  13  14  15  ...