使用单独的python函数导入依赖项

时间:2018-02-01 13:56:05

标签: python python-3.x import python-import

简单的问题:我正在为一些简单的机器学习任务构建一个标准的repo,我几乎总是在那些.py模块中导入相同的依赖项。

如果我能创建一个导入所有标准依赖项的.py文件,我认为它会使我的代码混乱(并节省时间)。然后可以将其扩展到依赖于模型的不同类别,例如, sklearn,xgboost等。

1)建议从外部函数调用依赖项吗? 2)如果是这样,这将如何做得最好?

到目前为止,我已经尝试了以下内容:

project_dependencies.py包含

def get_dependencies():
    import numpy as np

if __name__ == "__main__":
    get_dependencies() 
然后

model.py可能包含

from project_dependencies import get_dependencies

get_dependencies()

def model():
    return np.random.normal(1)

if __name__ == "__main__":
    model()

但这似乎不起作用。对此有什么好的长期解决方案?谢谢!

1 个答案:

答案 0 :(得分:1)

一般建议是在您需要的模块/文件中导入所需的模块。这偶尔需要一些额外的输入,但是使每个文件/模块更加独立。

另一种方法(但不太推荐)可能是导入包CREATE TRIGGER fireStaff ON dbo.Staff FOR DELETE AS BEGIN SET NOCOUNT OFF; DECLARE @id_s INT , @sal INT; SELECT @id_s = STAFF_ID FROM deleted; SELECT @sal = salary FROM deleted; IF @sal > 7000 BEGIN RAISERROR( 'Trigger has been stopped, not allowed to delete a worker who earns salary over 7000.' , 16 , 1); ROLLBACK; END; ELSE BEGIN PRINT 'Staff name "' + CAST(@id_s AS NVARCHAR(20)) + '" was deleted from the database.'; END; GO 文件中的所有依赖项(几乎没有其他任何东西),然后在其他包模块中进行相对导入,例如__init__.py
虽然经常会from . import *倾向于使用相反的方式:它(相对)导入包模块中由__init__.py定义的所有内容。

基本上,看看其他一些着名的大项目,看看他们做了什么。 Django,请求,NumPy等你可能会发现它们分别在每个模块内部导入外部依赖关系,并且仅针对内部依赖关系(类,函数等)使用相对导入。也就是说,他们使用第一个选项。