导入我 python 喜欢的任意文件

Importing an arbitrary file that I python like

提问人:user3696153 提问时间:11/11/2023 更新时间:11/11/2023 访问量:25

问:

我正在尝试创建一个工具,并想用python实现它。 我只关心将其与现代 python 3 系统一起使用。 我想用标准的python库来做到这一点,没有额外的模块。

一般的想法是该工具被告知“加载文件(X)” 它实际上是一个类似 python 的文件,我想在文件中使用 python 结构。

这个想法对我来说并不简单,要用简短的方式解释。 但这里是:

我有几个类叫做:APPLICATION、LIBRARY、TOOL、GENDATA。

  • APPLICATION 定义一个可执行文件。
  • LIBRARY 定义了一个静态库
  • TOOL 定义了另一种类型的可执行文件
  • GENDATA是由某个工具生成的数据 GENDATA 的一个示例是由工具创建的标头或源代码文件。

该工具将循环访问一组目录并导入该目录。 要导入目录,它会读取一个文件:“tool_name.py”。 (有点像 CMAKE 使用 CMakefile.txt 导入子目录的方式)

我希望能够在这个导入的文件中充分利用 python 的所有内容。 所以它有点像:

    # In the "Main File" we define some classes or functions
    def THIS_FUNCTION( .. parameters .. ):
         ... does something ...
    def THAT_FUNCTION( .. parameters .. ):
         ... does something else ...
    class FOO(...):
         ... stuff
    class BAR(...):
         ... other stuff
    # prepare a list of names to pass to the import/evaluation process.
    predefined_things = [ FOO, BAR, THIS_FUNCTION, THAT_FUNCTION ]

    # for each thing we need to import.
    for name in ALL_SUBDIRS:
         # go import/execute that python file in that directory.
         # and pass a list of predefined classes it might use. 
         all_things.extend( import_this_subdir( name, predefined_functions ) )

这个想法有点像 Scons 构建系统,但事实并非如此。

今天 - 每个子目录都有一个由工具读取和处理的文件。 但是这些文件变得越来越复杂,我希望能够 在这些文件中执行 python 代码,这将简化这些模块文件

我知道我可以: eval() 源文件。这很简单。

我不知道该怎么做是将“预定义”函数或类的列表传递给赋值器,即:“除了标准的 python 之外,这里还有一些额外的函数,这些函数已经定义,可以由正在导入的文件使用。

蟒蛇 python-import

评论

0赞 Karl Knechtel 11/11/2023
“要导入目录,它会读取一个文件:”tool_name.py“” - 当您“导入”此目录时,究竟需要发生哪些事情,这与仅仅执行的结果不同?“我不知道该怎么做是将'预定义'函数或类的列表传递给评估器,即:”除了标准的 python 之外,这里还有一些额外的函数,这些函数已经定义好了,可以被导入的文件使用。是否希望能够在顶级代码中引用这些函数?如果是这样,你会用这种方式解决什么问题?import tool_name
0赞 Karl Knechtel 11/11/2023
如果另一个 .py 文件中只有某个函数或类,您希望能够使用其他一些信息,那么您可以像使用任何其他函数调用一样执行此操作:将其作为参数传入。
0赞 Nick ODell 11/11/2023
如果我正确理解了这个问题,您可以使用回调或导入来做到这一点。例如,您可以将一个函数作为参数传递给 scipy.optimize.minimize,它将调用您的函数。第二个想法是您可以从其他 Python 文件导入 Python 文件。

答: 暂无答案