【问题标题】:`importlib` not utilising/recognising path`importlib` 没有使用/识别路径
【发布时间】:2021-03-20 04:47:46
【问题描述】:

我正在尝试在运行我的主要 python 脚本时导入模块,使用较小的 setup.py 脚本。但是importlib 命令:importlib.util.spec_from_file_location(name, location) 似乎没有检测到我的小python 脚本。大概我没有正确填写namelocation 字段。

示例脚本 A (setup.py):

import os
import pandas as pd

print("success!") # So I can see it has run.

示例脚本 B (my_script.py):

import importlib

setup_path = ("/home/solebay/My Project Name/")
start_up_script = importlib.util.spec_from_file_location("setup.py", setup_path)
module = importlib.util.module_from_spec(start_up_script)

运行上面的 sn -p 返回:

AttributeError: 'NoneType' object has no attribute 'loader'

我随后通过运行type(start_up_script) 进行了调查,它给出的结果是typeNone

路径正确。我通过运行以下命令验证了这一点:

"/home/solebay/My Project Name/"
sudo python3 "/home/solebay/My Project Name/setup.py"

这些分别打印了消息is a directorysuccess!


注意: Maurice Meyer 成功回答了我的主要问题,因此我将其标记为正确。但是,我还没有实现我的主要目标;即通过另一个脚本导入模块。所以如果这是你的目标,这个问题可能不适合你。

【问题讨论】:

    标签: python path python-module python-importlib


    【解决方案1】:

    传递给spec_from_file_locationlocation 参数必须是python 脚本的完整路径:

    import importlib.util
    spec = importlib.util.spec_from_file_location(
        name='something__else',  # name is not related to the file, it's the module name!
        location='/tmp/solebay/My Project Name/setup.py'  # full path to the script
    )
    my_mod = importlib.util.module_from_spec(spec)
    spec.loader.exec_module(my_mod)
    print(my_mod)
    

    输出:

    success!
    <module 'something__else' from '/tmp/solebay/My Project Name/setup.py'>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-26
      • 1970-01-01
      • 2018-05-25
      • 2016-09-11
      • 2015-04-19
      • 1970-01-01
      • 2011-09-21
      • 2011-05-01
      相关资源
      最近更新 更多