【问题标题】:Python3 import file from directory starting with numberPython3从以数字开头的目录导入文件
【发布时间】:2018-09-16 15:16:49
【问题描述】:

我尝试了this question 中的答案,但无济于事,所以我认为值得单独提出一个问题。目录布局如下:

aale/
     2/
       2.py
       __init__.py
     3/
       3.py
       __init__.py
     __init__.py

很遗憾,名称无法更改(这是针对硬件问题提供给我们的布局)。我正在尝试从3 导入2,但它似乎不起作用。我尝试将importlib 用作:

two = importlib.import_module('2.2') 以及 two = importlib.import_module('2')

这也不起作用(出现ModuleNotFoundError: No module named '2' 错误)。任何帮助/其他方法将不胜感激。我正在使用 Python 3.6。

【问题讨论】:

  • 当您对链接问题使用已接受的答案时会出现什么错误?
  • @roganjosh 相同的ModuleNotFound 错误,我认为import_module__import__ 的包装器
  • 你用的是什么IDE?
  • @MosheSlavin 我只是使用 sublime 在命令行上编辑和运行程序python3 3.py

标签: python python-3.x import


【解决方案1】:

假设您的脚本位于aale 目录中,您需要像这样进行导入:

two = importlib.import_module('aale.2.2')

【讨论】:

  • 为此我得到ModuleNotFoundError: No module named 'aale'
  • 我不知道该说什么,我只是测试了你的确切结构。尽管您确实声明您拥有__init.__py,但应该是__init__.py
  • 是的,只是一个错字。嗯,那我们可能不走运
【解决方案2】:

你可以使用__import__,即:

two  = __import__("2.2") # or __import__("aale.2.2") 
three = __import__("3.3") # or __import__("aale.3.3")

相当于:

import 2.2 as two  
import 3.3 as three

这是不可能的。


注意事项:

  1. 根据PEP 8 styling guide

    模块名称应该有全小写的短名称。下划线可以用在模块名中 如果改善 可读性。

  2. 我已经使用与您在 问题,没有显示错误。

参考资料:

  1. https://stackoverflow.com/a/16644280/797495
  2. In python, how to import filename starts with a number
  3. PEP 8 -- Style Guide for Python Code

【讨论】:

  • 嗯,好的,但这是 OP 的任务,这并不能解决问题
  • @AJwr 我没有意识到这是硬件,更新答案,谢谢。
【解决方案3】:

你可以使用pathlib

这是基本的:

from pathlib import Path


BASE_LOCATION = Path(__file__).parent

(您可以添加.parent 进入上面的文件夹等等。)

编辑

如果这对您没有帮助,您可以尝试import weirdimport

您可以阅读有关此here 的更多信息。

希望这会有所帮助!

【讨论】:

  • 对不起,我不确定如何使用它。我应该在从中获得的路径上使用importlib 吗?
  • 在@Stephen 的回答中,您说您得到了ModuleNotFoundError: No module named 'aale',所以除了他的解决方案之外,您还可以添加来自 pathlib 的路径
猜你喜欢
  • 2017-11-30
  • 1970-01-01
  • 2021-11-22
  • 1970-01-01
  • 2012-02-23
  • 2014-09-11
  • 1970-01-01
  • 1970-01-01
  • 2021-02-02
相关资源
最近更新 更多