python导包顺序_Python程序包的本地集合:导入它们的最佳方法?

我需要运送使用多个存储在本地Library目录中的软件包的Python程序集合:目标是避免用户在使用我的程序之前安装软件包(这些软件包位于Library目录中).导入库中包含的软件包的最佳方法是什么?

我尝试了三种方法,但它们都不是完美的:有没有更简单,更可靠的方法?还是这些方法中最好的一种?

>在第一种方法中,只需将Library文件夹添加到库路径:

import sys

import os

sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'Library'))

import package_from_Library

Library文件夹放在开头,以便程序附带的软件包优先于用户安装的相同模块(通过这种方式,我确定它们具有与我的程序一起使用的正确版本).当“库”文件夹不在当前目录中时,此方法也适用.但是,这种方法有缺点.我的每个程序都向sys.path添加了相同路径的副本,这很浪费.此外,所有程序都必须包含相同的三条路径修改行,这违反了“不要自己重复”的原则.

>对上述问题的改进在于,通过在导入的模块中添加库路径,尝试仅添加一次:

# In module add_Library_path:

sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'Library'))

然后在我的每个程序中使用:

import add_Library_path

import package_from_Library

这样,借助CPython的缓存机制,模块add_Library_path仅运行一次,并且库路径仅添加一次到sys.path.但是,此方法的缺点是import add_Library_path具有不可见的副作用,并且导入的顺序很重要:这使代码更不清晰,更脆弱.另外,这迫使我分发程序以包含用户不会使用的add_Library_path.py程序.

>也可以通过将库中的Python模块打包成一个包(存储在其中的空__init__.py文件)来导入它,该包可以执行以下操作:

from Library import module_from_Library

但是,这会破坏Library中的程序包,因为它们可能会执行xlutils.filter import…之类的操作,这会因为在sys.path中找不到xlutils而中断.因此,此方法有效,但仅当在Library中包括模块而不在包中包括模块时才有效.

所有这些方法都有一些缺点.

有没有更好的方法来传送带有存储在本地Library目录中的程序包集合的程序?还是上述方法之一(方法1?)是最好的?

PS:就我而言,Library中的所有软件包都是纯Python软件包,但是适用于任何操作系统的更通用的解决方案是最好的.

PPS:目标是使用户能够使用我的程序而无需安装任何程序(除了复制我定期发送的目录之外),如上面的示例中所示.

PPPS:更准确地说,目标是要具有灵活性,使用户对包含我的程序和“隐藏”的“库”文件夹的目录进行简单的复制,从而轻松地从“库”更新我的程序集及其相关的第三方软件包. ”第三方软件包. (我经常进行更新,因此我不想强迫用户也更新他们的Python发行版.)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值