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

Where to place supplementary files for a python package?

我正在开发一个 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()

此代码的问题在于我的脚本试图从与 test_axl_connection.py 相同的目录中打开 axlsqltoolkit。我需要它从与我导入的模块相同的目录中打开它。我如何实现这一目标?

此外,将补充文件(例如我的 WSDL)放入我的 python 包中是否明智?

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