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