【发布时间】:2016-12-29 02:43:20
【问题描述】:
我有一个文件结构如下的项目:
root/
run.py
bot/
__init__.py
my_discord_bot.py
dice/
__init__.py
dice.py
# dice files
help/
__init__.py
help.py
# help files
parser/
__init__.py
parser.py
# other parser files
程序在root 目录中通过调用python run.py 运行。 run.py 导入 bot.my_discord_bot,然后使用那里定义的类。
文件bot/my_discord_bot.py 有以下导入语句:
import dice.dice as d
import help.help as h
import parser.parser as p
在 Linux 上,所有三个 import 语句都能正确执行。在 Windows 上,前两个似乎执行得很好,但在第三个我被告知:
ImportError: No module named 'parser.parser'; 'parser' is not a package
为什么它会在第三个 import 语句中中断,为什么它只在 Windows 上中断?
编辑:阐明程序是如何运行的
【问题讨论】:
-
Linux 和 Windows 上的 Python 版本是否可能不同?如果是这样,您是否支持两者?
-
您提到前两个导入“似乎执行良好”,但如果您注释掉
import parser.parser as p行,其他导入是否成功?另外,您的root/中是否需要__init__.py? -
@elethan 其他导入仍然成功,但有问题的导入已被注释掉。如果我将
__init__.py添加到我的根目录,我也不会得到任何更改。 -
PYTHONPATH 环境变量中的“根”目录吗?
-
另外,三重检查
parser/中的__init__.py没有发生任何事情,并且您没有隐藏内置或第三方库。例如,如果我打开一个 Python 3 解释器并执行import parser它是成功的,即使我自己还没有创建一个名为parser的包。也许只是测试重命名包是否可以解决问题。我知道它在 Linux 上成功了,但也许你的 Windows 安装上有另一个名为parser的软件包,但 Linux 上没有。 python-notes.curiousefficiency.org/en/latest/python_concepts/…
标签: python windows python-3.5