Я активно занимаюсь разработкой модуля Python, который я хотел бы развернуть в SQL Server 2017, установленном локально, поэтому я развертываю модуль в c:\Program Files\Microsoft SQL Server\<Instance Name>\PYTHON_SERVICES\Lib\site-packages
, используя setuptools
, например:
"c:\Program Files\Microsoft SQL Server\<Instance_Name>\PYTHON_SERVICES\python" setup.py develop
Это создает каталог .egg-info
в моем проекте root и файл .egg-link
в каталоге site-packages
, упомянутом выше. Файл .egg-link
правильно указывает на каталог .egg-info
в моем проекте root, поэтому кажется, что setuptools
работает правильно.
Вот мой setup.py
для справки:
from setuptools import setup
setup(
setup_requires=['pbr'],
pbr=True,
)
А вот соответствующий файл setup.cfg
:
[metadata]
name = <module_name>
description = <Module Description>
description-file = README.md
description-content-type = text/markdown
[files]
package_root = py/src
Поскольку я просто пытаюсь заставить сантехнику работать, у меня есть один python скрипт под названием uploader.py
в <project_root>/py/src
:
#uploader.py
class Upload:
pass
После этого развертывания я надеюсь просто import
модуль, который я только что опубликовал через .egg-link
, в sp_execute_external_script
вызов, например:
execute sp_execute_external_script @language= N'Python', @script= N'from <module_name>.uploader import Upload';
Однако выполнение этой хранимой процедуры из SSMS приводит к появлению следующего сообщения об ошибке:
Msg 39004, Level 16, State 20, Line 10
A 'Python' script error occurred during execution of 'sp_execute_external_script' with HRESULT 0x80004004.
Msg 39019, Level 16, State 2, Line 10
An external script error occurred:
Error in execution. Check the output for more information.
Traceback (most recent call last):
File "<string>", line 5, in <module>
File "C:\SQL-MSSQLSERVER-ExtensibilityData-PY\MSSQLSERVER01\C08BB9A7-66B5-4B5E-AAFC-B0248EE64199\sqlindb.py", line 27, in transform
from <module_name>.uploader import Upload
ImportError: No module named '<module_name>'
SqlSatelliteCall error: Error in execution. Check the output for more information.
STDOUT message(s) from external script:
SqlSatelliteCall function failed. Please see the console output for more information.
Traceback (most recent call last):
File "C:\Program Files\Microsoft SQL Server\<Instance_Name>\PYTHON_SERVICES\lib\site-packages\revoscalepy\computecontext\RxInSqlServer.py", line 587, in rx_sql_satellite_call
rx_native_call("SqlSatelliteCall", params)
File "C:\Program Files\Microsoft SQL Server\<Instance_Name>\PYTHON_SERVICES\lib\site-packages\revoscalepy\RxSerializable.py", line 358, in rx_native_call
ret = px_call(functionname, params)
RuntimeError: revoscalepy function failed.
Я явно отредактировал module_name
и Instance_Name
из сообщения об ошибке.
Я пытался использовать install
вместо develop
введите команду, чтобы убедиться, что файл .egg-link
не является проблемой. install
устанавливает файл .egg-info
в site-packages
, но я получаю ту же ошибку.
Я также пытался удалить pbr
из смеси, но получил ту же ошибку.
Наконец Я попытался добавить <project_root>
к sys.path
, как предложено Как я могу использовать внешний python модуль с SQL 2017 sp_execute_external_script? , но это тоже не помогло.
Итак, на данный момент, я понятия не имею, что я могу делать неправильно.
python версия 3.5.2
, и я не думаю, что __init__.py
требуется в проекте, чтобы он мог квалифицироваться как модуль. Вставка пробела __init__.py
в py/src
также не помогает.
Моя pip
версия 19.3.1
, setuptools
версия 44.0.0
и pbr
версия 5.4.4
и Я подтвердил, что все модули установлены в каталоге site-packages
, упомянутом выше.