【问题标题】:Where to place supplementary files for a python package?在哪里放置 python 包的补充文件?
【发布时间】:2019-10-31 22:50:46
【问题描述】:

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

【问题讨论】:

    标签: python package cucm


    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-25
      • 2019-07-01
      • 1970-01-01
      • 2016-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-04
      相关资源
      最近更新 更多