Программирование

Python 3 на Cygwin не видит модуль

ELForcer 01-09-2017 20:51

iBelt уже пробовал. Без Freetds сначала ругался на sqlfront.h при установке через pip3, а с установкой ругается на BASEVERSION_80. Причем неважно какая версия freeTDS, старая или новая (для Pymssql вроде как старая нужна).

iBelt 01-09-2017 22:53

Ну а как именно "ругается на BASEVERSION_80"? В какой момент ругается?

Я бы вообще сначала проверил, работают ли тулзы из состава FreeTDS, типа fisql и bsqldb.

ELForcer 04-09-2017 14:50

Вот лог установки:
quote:
$ pip3 install pymssql
Collecting pymssql
Using cached pymssql-2.1.3.tar.gz
Building wheels for collected packages: pymssql
Running setup.py bdist_wheel for pymssql ... error
Complete output from command /usr/bin/python3 -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-rl1ub8vx/pymssql/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" bdist_wheel -d /tmp/tmp35p7bux_pip-wheel- --python-tag cp36:
setup.py: platform.system() =; 'CYGWIN_NT-6.0'
setup.py: platform.architecture() =; ('32bit', 'WindowsPE')
setup.py: platform.libc_ver() =; ('', '')
setup.py: Not using bundled FreeTDS
setup.py: include_dirs = []
setup.py: library_dirs = ['/usr/local/lib']
running bdist_wheel
running build
running build_ext
building '_mssql' extension
creating build
creating build/temp.cygwin-2.8.2-i686-3.6
gcc -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -ggdb -O2 -pipe -Wimplicit-function-declaration -fdebug-prefix-map=/usr/src/ports/python3/python3-3.6.1-2.i686/build=/usr/src/debug/python3-3.6.1-2 -fdebug-prefix-map=/usr/src/ports/python3/python3-3.6.1-2.i686/src/Python-3.6.1=/usr/src/debug/python3-3.6.1-2 -ggdb -O2 -pipe -Wimplicit-function-declaration -fdebug-prefix-map=/usr/src/ports/python3/python3-3.6.1-2.i686/build=/usr/src/debug/python3-3.6.1-2 -fdebug-prefix-map=/usr/src/ports/python3/python3-3.6.1-2.i686/src/Python-3.6.1=/usr/src/debug/python3-3.6.1-2 -I/usr/include/python3.6m -c _mssql.c -o build/temp.cygwin-2.8.2-i686-3.6/_mssql.o -DMSDBLIB
_mssql.c: В функции «__pyx_f_6_mssql__tds_ver_str_to_constant»:
_mssql.c:18814:15: ошибка: «DBVERSION_80» undeclared (first use in this function)
__pyx_r = DBVERSION_80;
^
_mssql.c:18814:15: замечание: each undeclared identifier is reported only once for each function it appears in
error: command 'gcc' failed with exit status 1

----------------------------------------
Failed building wheel for pymssql
Running setup.py clean for pymssql
Failed to build pymssql


THE HEDGEHOG 04-09-2017 17:43

quote:

Did you try this:

brew install freetds
Source: http://pymssql.org/en/latest/intro.html

If you get this error:

__pyx_r = DBVERSION_80;
^
1 error generated.
then you can fix it with this:

brew unlink freetds
brew install homebrew/versions/freetds091
and then install:

pip install pymssql
source: https://github.com/pymssql/pymssql/issues/432


пруф

ELForcer 04-09-2017 19:18

Я это видел. К сожалению, программы brew нет в Cygwin и его не установить через setup. Ну или я не знаю в каком пакете он есть. Поиск по вхождению не дал.

Тут еще читал что возможно в Питоне 3.6 нет поддержки модуля pymssql, попробую на 3.5 установить.

iBelt 05-09-2017 12:25

Brew это всего лишь менеджер пакетов для OS X, суть в том, чтобы установить версию FreeTDS 0.91

На самом деле этого можно и не делать, просто залезь в pymssql-2.1.3.tar.gz, поправь там в исходнике DBVERSION_80 на DBVERSION_71 и пересобери pip'ом. То, что разработчики FreeTDS считали версией протокола 8.0, на самом деле 7.1, просто это выяснилось только после того, как Microsoft соизволила опубликовать спецификацию протокола. Вот тут описано: http://www.freetds.org/userguide/choosingtdsprotocol.htm

Вообще это косяк того, кто делал pymssql, константа считается obsolete. Жди новую версию или поищи форк где добрые люди пофиксили это. (в смысле если не хочешь/не умеешь сам в исходниках ковыряться)

ELForcer 05-09-2017 12:45

iBelt спасибо. Завтра попробую глянуть исходники. Новую версию можно и до нового года не дождаться.