首页 > 解决方案 > 在哪里放置 python 包的补充文件?

问题描述

我正在开发一个 python 包来简化与 Cisco Unified Communications Manager 的 AXL API 的 SOAP 通信。CUCM 不允许直接通过 URL 访问 WSDL,而是必须在本地下载 WSDL。我不必在安装包的每台机器上下载 WSDL,而是希望将其作为包的一部分包含在内。来自 CUCM 的 WSDL 位于名为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 包中是否明智?

标签: pythonpackagecucm

解决方案


不要使用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


推荐阅读