python - 在哪里放置 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 包中是否明智?
解决方案
不要使用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
推荐阅读
- asp.net-core - 有没有关于没有刷新页面的asp.net core mvc切换路由的解决方案,比如角度路由重用策略
- angular - Angular8 - 通过下拉(选择)值动态关注多个输入
- javascript - 有没有办法保存上传到html页面的文件的路径
- regex - 如何在本机反应中删除字符串之前的每个空格和换行符?
- python - Pandas 按字母顺序对第二个字符的值进行排序
- wordpress - 关于 A/B 测试价格的建议?
- flutter - 用于运行 onnx 模型的颤振插件
- nvidia - 在 Jetson nano 和 jetson xavier 上运行 Nvidia-docker 以实现 tensorflow 等深度学习框架
- git - 在处理其他项目时如何在 vs 代码中关闭终端中的当前 git 存储库
- spartacus-storefront - 如何在斯巴达克斯中自定义核心组件?