mssql-cli icon indicating copy to clipboard operation
mssql-cli copied to clipboard

Error when using mssql-cli with Python 3.10 latest version

Open jmoralesv opened this issue 3 years ago • 18 comments

Hi all, I'm writing this issue because I came across an error when using mssql-cli with the latest Pyton 3.10. Installation goes fine, however, when trying to run mssql-cli to connect to a local SQL Server instance, I got this:

PS C:\Users\Jorge> mssql-cli -S . -E
Traceback (most recent call last):
  File "C:\Python310\lib\runpy.py", line 196, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "C:\Python310\lib\runpy.py", line 86, in _run_code
    exec(code, run_globals)
  File "C:\Python310\lib\site-packages\mssqlcli\main.py", line 122, in <module>
    main()
  File "C:\Python310\lib\site-packages\mssqlcli\main.py", line 115, in main
    run_cli_with(mssqlcli_options)
  File "C:\Python310\lib\site-packages\mssqlcli\main.py", line 44, in run_cli_with
    from mssqlcli.mssql_cli import MssqlCli
  File "C:\Python310\lib\site-packages\mssqlcli\mssql_cli.py", line 14, in <module>
    from cli_helpers.tabular_output import TabularOutputFormatter
  File "C:\Python310\lib\site-packages\cli_helpers\tabular_output\__init__.py", line 11, in <module>
    from .output_formatter import format_output, TabularOutputFormatter
  File "C:\Python310\lib\site-packages\cli_helpers\tabular_output\output_formatter.py", line 10, in <module>
    from . import (delimited_output_adapter, vertical_table_adapter,
  File "C:\Python310\lib\site-packages\cli_helpers\tabular_output\tabulate_adapter.py", line 4, in <module>
    from cli_helpers.packages import tabulate
  File "C:\Python310\lib\site-packages\cli_helpers\packages\tabulate.py", line 6, in <module>
    from collections import namedtuple, Iterable
ImportError: cannot import name 'Iterable' from 'collections' (C:\Python310\lib\collections\__init__.py)

From what I understood, it looks like mssql-cli has a dependency on cli-helpers which in turn depends on some tabular packages and the one for tabulate.py can't find the Iterable type in "collections". Could this mean that the dependencies need to be updated?

I'm not a Python developer, my background is .NET, so I'm not sure how to solve this. For now I'm planning on going back to Python 3.9 which I think it could work, I just wanted to point this out.

Thanks for your help on this.

Regards, Jorge

jmoralesv avatar Oct 09 '21 07:10 jmoralesv

Hi all, Just un update: I was able to install mssql-cli and using it correctly when using Python 3.9.7. So it looks like there is a compatibility issue between mssql-cli dependencies and Python 3.10 in Windows 10.

Regards, Jorge

jmoralesv avatar Oct 10 '21 00:10 jmoralesv

tabulate was removed as a vendored package and added as a dependency. Perhaps you might want to upgrade cli_helpers package.

https://github.com/dbcli/cli_helpers/commit/a21650dd458d42936aa95ad41b8f676e81579b91

tirkarthi avatar Oct 10 '21 08:10 tirkarthi

tabulate was removed as a vendored package and added as a dependency. Perhaps you might want to upgrade cli_helpers package.

dbcli/cli_helpers@a21650d

This solves my issue by forcing cli-helpers to the newest version. Although there are warnings from mssql-cli about the dependency issue when updating cli-helpers.

wangxiaoying avatar Nov 05 '21 01:11 wangxiaoying

Hi all, Just un update: I was able to install mssql-cli and using it correctly when using Python 3.9.7. So it looks like there is a compatibility issue between mssql-cli dependencies and Python 3.10 in Windows 10.

Regards, Jorge

Yep, using Python 3.9.9 works for me too!

nicholasyin avatar Dec 15 '21 04:12 nicholasyin

Hi all, I've just tried the following today to no avail:

  • Upgrade to Python 3.10.1 in Windows 10
  • Install mssql-cli with pip (I can see it uses cli-helpers version 0.2.3)
  • Force upgrading cli-helpers to latest version (2.2.0)
  • Running mssql-cli throws error

However, using Python 3.9.9 works for me.

I decided to keep Python 3.9.9 pinned in Chocolatey for now, as that is the package manager I use in Windows.

jmoralesv avatar Dec 18 '21 03:12 jmoralesv

I hit the same thing - Python 3.10 on a Windows 10 machine got the following error:

ImportError: cannot import name 'Iterable' from 'collections' 

Installing Python 3.9.9 was the only way I could work around it.

joshuaclausen avatar Feb 24 '22 23:02 joshuaclausen

Are you surprised how they simply ignore this and don't want to fix it at all?

nicholasyin avatar Feb 25 '22 02:02 nicholasyin

FYI this has already been fixed in code, it's just there hasn't been a release of this module in over 2 years :/

ashb avatar Aug 01 '22 10:08 ashb

FYI this has already been fixed in code, it's just there hasn't been a release of this module in over 2 years :/

Wondering if this is managed by Microsoft? What happens to the famous Microsoft management?

nicholasyin avatar Aug 04 '22 03:08 nicholasyin

Tried to run SQL Server Analysis Services on Linux and realized, that there is no such option😂

Also needed plugin for Visual Studio to extract the cube. This plugin is supported up to VS 2019, so I needed to install one😌

But Microsoft is working hard on another Windows Update in the meantime🥳

dkostmii avatar Aug 04 '22 17:08 dkostmii

Still no support for Python 3.10? 3.11 is already out...

JonasKru avatar Nov 07 '22 07:11 JonasKru

Command line tools are less import in Microsoft's philosophy. lol. Unsubscribing.

nicholasyin avatar Nov 07 '22 08:11 nicholasyin

FYI this has already been fixed in code, it's just there hasn't been a release of this module in over 2 years :/

@ashb Would you mind help pointing to the code that fixed this? if possible of course. Thanks in advance!

xuyuji9000 avatar Feb 20 '23 12:02 xuyuji9000

The following steps solved my problem.

pip install --upgrade cli_helpers

If that does not work, you can also upgrade tabulate:

pip install --upgrade tabulate

Also set the environment variable to your shell config file (believe you can also set it in mssqlrc but I haven't tried it):

export DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=true

may also need to change the 'mssql-cli' bash file line 16 to python3.

clpan avatar Mar 17 '23 13:03 clpan

The following steps solved my problem.

pip install --upgrade cli_helpers

If that does not work, you can also upgrade tabulate:

pip install --upgrade tabulate

Also set the environment variable to your shell config file (believe you can also set it in mssqlrc but I haven't tried it):

export DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=true

may also need to change the 'mssql-cli' bash file line 16 to python3.

pip install --upgrade cli_helpers worked for me on python 3.10.4

codekip avatar Aug 03 '23 11:08 codekip

I have freshly installed Ubuntu 22.04 and canät get mssql-cli working. Previously I have successfully usd pyenv to get compatible version, but now I get: "No usable version of libssl was found"

If I try to install lib ssl with pipi install ssl it fails – I believe since package is not maintained and python has ssl internally included anyway.

Iäm out of ideas, since above people seem to be able to get mssql-cli running on 3.9.x versions. I've tried now 3.9.9. 3.9.5 and 3.5.5 under pyenv and with all the same issue about libssl.

elsonico avatar Aug 31 '23 07:08 elsonico

Still have same problem from Ubuntu 22.04 on WSL on Windows11. No usable version of libssl was found

jo7ueb avatar Dec 11 '23 14:12 jo7ueb

Los siguientes pasos resolvieron mi problema.

pip install --upgrade cli_helpers

Si eso no funciona, también puedes actualizar tabular:

pip install --upgrade tabulate

También configure la variable de entorno en su archivo de configuración de Shell (creo que también puede configurarla en mssqlrc pero no lo he probado):

export DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=true

Es posible que también deba cambiar la línea 16 del archivo bash 'mssql-cli' a python3.

The first command worked for me in Python 3.12.2. :) Updated cli_helpers to version 2.3.1 and it told me that it was not compatible with mssql-cli 1.0.0 (the version I have), however it worked correctly.

Lycan66 avatar Mar 22 '24 18:03 Lycan66