在哪里放置python软件包的补充文件?

时间:2019-10-31 22:50:46

标签: python package cucm

我正在开发一个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包是否明智?

1 个答案:

答案 0 :(得分:1)

请勿使用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