我在Python中有一个大型定制项目包 for Digital-Assistant
程序。
为了在相同库的其他子包中使用几个文件,我必须在import语句中导入许多具有相同子路径的文件,这使得它看起来是多余的。
例如:
from mylibs.master_lib.digital_assistant.web_bots.google_bot import searchGoogle
from mylibs.AI.CV import *
from mylibs.master_lib.digital_assistant.web_bots.social_media_connect import wa_pag
from mylibs.master_lib.digital_assistant.languages import access_dictionary
from mylibs.master_lib.digital_assistant.digital_assistant import speech_to_text
from mylibs.master_lib.digital_assistant.user_interface import *
from mylibs.master_lib.digital_assistant.web_bots.social_media_connect import *
from mylibs.master_lib.data_science.data_analytics import *
from mylibs.master_lib.digital_assistant.webAppsOC import *
from mylibs.master_lib.digital_assistant.device_controller import *
from mylibs.master_lib.digital_assistant.computer_graphics import *
from mylibs.master_lib.digital_assistant.desktopAppsFiles import *
from mylibs.AI.NLP import *
在上面的片段中,'mylibs.master_lib.digital_assistant‘语句对于许多导入来说是常见的。(similar to huge libraries like Django, Tensorflow, etc)
--我想给libs取短名字不是一种选择,因为它的所有沉重的包都喜欢详细的名称。
。
有没有办法给那些大的相同的导入子路径取一个可选的小名呢?
发布于 2022-10-26 09:17:02
这些情况发生在大型项目中,如Semi-Detached
和Embedded
类型的项目,根据COCOMO Model
方法1
利用exec
函数、f-strings
和for loop
实现这一功能。
这种方法在大量进口的情况下是有用的,它不想保持可读性。
for module in ["web_bots.google_bot import searchgoogle", "web_bots.social_media_connect import wa_pag", "languages import access_dictionary", "digital_assistant import speech_to_text","user_interface import *", "web_bots.social_media_connect import *", "webappsopenclose import *"]:
exec(f"from mylibs.master_lib.digital_assistant.{module}")
for module in [".data_science.data_analytics import *", ".device_controller import *", ".artificial_intelligence.cv.computer_graphics import *"]:
exec(f"from mylibs.master_lib.{module}")
方法2
如果您想维护程序的可读性,请使用
函数和
f-strings
来改变大型导入的长度。
MM, DA = "from mylibs.master_lib", "digital_assistant"
exec(f"{MM}.{DA}.web_bots.google_bot import searchgoogle")
exec(f"{MM}.{DA}.web_bots.social_media_connect import wa_pag")
exec(f"{MM}.{DA}.languages import access_dictionary")
exec(f"{MM}.{DA}.digital_assistant import speech_to_text")
exec(f"{MM}.{DA}.user_interface import *")
exec(f"{MM}.{DA}.web_bots.social_media_connect import *")
exec(f"{MM}.{DA}.webappsopenclose import *")
exec(f"{MM}.data_science.data_analytics import *")
exec(f"{MM}.device_controller import *")
exec(f"{MM}.artificial_intelligence.cv.computer_graphics import *")
方法3
您也可以使用importlib
import importlib
importlib.import_module(".Add_Ons", "MyLibs.GrandCollection.DS.Strings")
但该方法在引入模块而不是直接导入函数或常量时是可行的。
https://stackoverflow.com/questions/70132378
复制相似问题