导入Python包时如何允许排除模块?

时间:2019-01-10 08:54:38

标签: python package

我写了一个Python软件包<div class="form-div"> <form class="form-control" action="#" method="post">{% csrf_token %} <script type="text/javascript" src="{% static 'js/livecart.js' %}"> display(); </script> <h1 id="search-text">\ Checkout \</h1> <hr> <br> <label class="search-input" for="select-package">Package </label><br> <select required id="search-input" name="package-type"> <option class="search-input" value={{package}}>{{package}}</option> </select> <br> <label class="search-input" for="in-date">Check-in date </label><br> <input required id="search-input-in" type="date" name="in-date" value={{inDate}}><br> <label class="search-input" for="out-date">Check-out date </label><br> <input required id="search-input-out" type="date" name="out-date" value={{outDate}}><br> <label class="search-input" for="indiviuals">Indiviuals</label><br> <input required id="search-input-min" type="number" name="individuals" value="0" onchange="display();"><br> <hr> <input id="search-button" type="submit" name="search" value="Pay Rs.0"> </form> </div>,它可以执行一组相关任务,packtaskA,...,taskB。它们每个都有自己的模块文件,例如taskZ

现在在taskN.py中说,我导入了第三方软件包taskN.py。它可以在My Machine™上运行,但是我的同事(a)无法安装evilpack,但是(b)甚至不需要该模块evilpack

我的目标是构建程序包,以便我们可以在导入时选择是加载模块taskN还是忽略它。

解决这个问题的最优雅的方法是什么?我感觉到它与目录的taskN文件有关。

2 个答案:

答案 0 :(得分:1)

解决此问题的简单方法:

识别所有可能具有未实现依赖性的模块。

在执行导入的主模块中,将每个此类导入用try...except子句包围:

try:
    import packN
except ImportError as details:
    print ("Could not import packN because of this error:", details)
    print ("Functionality xxxx will not be available")
    packN = None

如果您同事的代码未调用依赖于packN的函数,那么一切都会很好。

答案 1 :(得分:0)

我认为我只能通过setupscript指向正确的方向,因为我无权访问您的数据/数据包详细信息。

简单地说,您将必须找到taskN.py的{​​{1}}脚本,并专门从脚本内部删除模块。