【问题标题】:why can't i import my own folder in python?为什么我不能在 python 中导入我自己的文件夹?
【发布时间】:2021-02-07 10:03:07
【问题描述】:

我的文件夹结构是:

  • rottParser/
    • __init__.py
  • rottSyntax/
    • __init__.py
  • rottTests/

我正在尝试将rottSyntax 导入rottParser, 在我的 IDE (pycharm) 中它可以工作,但在我的 python 控制台中它没有。

错误是:

[ari@ari-manjaro rottParser]$ python3.9 __init__.py
Traceback (most recent call last):
  File "/home/ari/Desktop/coding/python_/rott/rottParser/__init__.py", line 3, in <module>
    from rottSyntax import *
ModuleNotFoundError: No module named 'rottSyntax'

如前所述,在 py IDE 中一切正常,

这是rottParser/__init__.py

import sys
from rottSyntax import *

parse_file = sys.argv
print(parse_file)

c = '.hello'
a = syntax['comment'].search(c)
print(a)

rottSyntax/__init__.py:

import re
syntax = {
    "comment": re.compile(r'^\..+')
}

我尝试只导入它并使用.,但没有任何效果, 有人知道如何解决吗?

【问题讨论】:

  • 您的输入脚本在哪里/哪个?而且,您尝试使用from . import * 而不是from rottSyntax import *
  • 是的,我从 .导入 *,我正在尝试将 rottSyntax/__init__.py 导入到 rottParser/__init__.py
  • 这能回答你的问题吗? Sub packages and __init__.py
  • 请添加执行导入的脚本以及它的位置!谢谢
  • @Wolf ghchoi's 回答有效:DD

标签: python python-3.x import


【解决方案1】:

快速修复 1

如下执行脚本:

PYTHONPATH=.:$PYTHONPATH python rottParser/__init__.py

cd rottParser
PYTHONPATH=..:$PYTHONPATH python __init__.py

快速修复 2

将路径从rottParser/__init__.py 附加到sys.path

import sys
sys.path.append('/PATH/TO/rottParser/..')  # parent directory
from rottSyntax import *

相对导入

使用 Intra-package ReferencesrottParserrottSyntax 应该是子包。

采用如下结构,

├ rott
│ ├ rottParser/
│ │  └ __init__.py
│ └ rottSyntax/
│    └ __init__.py
└ main.py

main.py

import rott.rottParser

您可以使用相对导入,例如,来自 rottParser/__init__.py

from ..rottSyntax import *

如果你愿意

from .rottSyntax import *

目录结构应该类似

│ └ rottParser/
│    ├ __init__.py
│    └ rottSyntax/
│      └ __init__.py

【讨论】:

  • 不起作用;// ``` [ari@ari-manjaro rottParser]$ python3.9 init.py Traceback(最近一次调用最后一次):文件“ /home/ari/Desktop/coding/python_/rott/rottParser/__init__.py",第 3 行,在 中 from rottSyntax import SYNTAX ModuleNotFoundError: No module named 'rottSyntax' ```
  • @Ari157 你的init.py 是什么?它在哪里?是__init__.py吗?
  • __init__.py,我想将rottSyntax/__init__.py导入到rottParser/__init__.py
  • @Ari157 进行了编辑。我不知道根目录的名称,所以我使用.. 表示法,但是,您最好使用根目录的绝对路径。
  • @Ari157 我也会添加一个包内参考示例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-22
  • 2018-09-24
相关资源
最近更新 更多