Где разместить дополнительные файлы для пакета Python? - PullRequest
0 голосов
/ 01 ноября 2019

Я работаю над созданием пакета python для упрощения связи SOAP с API-интерфейсом AXL Cisco Unified Communications Manager. CUCM не разрешает доступ к WSDL напрямую через URL, вместо этого WSDL должен быть загружен локально. Вместо того, чтобы загружать WSDL на каждую машину, на которую я устанавливаю свой пакет, я хочу включить его в свой пакет. WSDL от CUCM входит в папку с именем axlsqltoolkit. Чтобы проверить функциональность, я создал небольшой модуль под названием axl_connection.py с простой функцией:

import os

def wsdl():
    os.startfile(os.path.join(os.getcwd(), 'axlsqltoolkit'))

Затем загрузил WSDL и поместил его в тот же каталог, что и: axl_connection.py. Я создал простой скрипт test_axl_connection.py (в отдельном каталоге):

import from axl_connection import wsdl
print('Testing the opening of the WSDL directory')

wsdl()

Проблема с этим кодом заключается в том, что мой скрипт пытается открыть axlsqltoolkit из того же каталога, что и test_axl_connection.py. Мне нужно открыть его из того же каталога, что и мой импортированный модуль. Как мне этого добиться?

Кроме того, разумно ли размещать дополнительные файлы, такие как мой WSDL, внутри моего пакета python?

1 Ответ

1 голос
/ 01 ноября 2019

не используйте os.getcwd()

для определения пути вашего модуля, взглянув на __file__

и в test_axl_connection.py

import os

MYPATH = os.path.realpath(os.path.dirname(__file__))

def wsdl():
    os.startfile(os.path.join(MYPATH, 'axlsqltoolkit'))

__file__ является магической переменной, содержащей путь к файлу, содержащему источник модуля.

os.path.dirname(__file__) дает вам имя каталога этого файла. Поскольку это может быть относительный путь, и вы никогда не узнаете, меняет ли кто-либо текущий рабочий каталог, рекомендуется сразу преобразовать его (во время импорта) в абсолютный путь.

Однако я лично обычно создаю отдельный каталог дляфайлы не Python, поэтому вы можете сделать что-то вроде:

import os

MYPATH = os.path.join(
    os.path.realpath(os.path.dirname(__file__)), "data")

def wsdl():
    os.startfile(os.path.join(MYPATH, 'axlsqltoolkit'))

и поместить файл wsdl в каталог с именем data, расположенный в каталоге, который содержит test_axl_connection.py

...