Python正在查找一些而不是所有自定义包

Python正在查找一些而不是所有自定义包,python,windows,python-3.5,Python,Windows,Python 3.5,我有一个文件结构如下的项目: 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__.

我有一个文件结构如下的项目:

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
程序通过调用
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上,所有三条导入语句都正确执行。在Windows上,前两个似乎运行良好,但在第三个上,我被告知:

ImportError: No module named 'parser.parser'; 'parser' is not a package
为什么它在第三个
import
语句中中断,为什么它只在Windows上中断


编辑:说明程序的运行方式

确保您的
解析器
没有隐藏内置或第三方包/模块/库

我不是100%确定如何解决这个名称冲突的具体细节,但似乎你可以(可能)。使您的模块被现有模块覆盖(这似乎可能发生在您的Windows案例中),或b)。覆盖现有模块,这可能会导致错误。似乎b是人们经常绊倒的东西

如果您认为这可能发生在您的某个模块上(它的名称很可能类似于
parser
),请尝试重命名您的模块


有关更多详细信息和更常见的Python“导入陷阱”,请参阅。

将run.py放在根文件夹之外,这样您就可以在根文件夹旁边运行run.py,然后在根文件夹内创建
\uu init\uuuuuuuuuuuuuuuuuuuuuuuuuuupy
,并将导入更改为:

import root.parser.parser as p
或者只是重命名您的解析器模块


无论如何,你应该小心命名,因为总有一天你会把自己的东西弄得一团糟。

在Linux和Windows上有可能有不同的Python版本吗?如果是这样,您是否确实支持这两种导入?您提到前两个导入“似乎执行得很好”,但如果您将
import parser.parser注释为p
行,其他导入是否成功?另外,在
根目录中是否需要
\uuu init\uuuuuuuuuuy.py
?@ele,而其他导入仍然成功,但有问题的导入被注释掉。如果我在根目录中添加一个
\uuu init\uuuuuuuuuuuuuuuupy
,我也不会得到任何更改。PYTHONPATH环境变量中的“root”目录是否存在?另外,请再次检查
解析器/
中的
\uu init\uuuuuuuuuuuuuuuuuuuupy
中的
是否没有发生任何问题,并且您没有跟踪内置库或第三方库。例如,如果我打开一个Python3解释器并执行
import parser
操作,即使我自己没有创建一个名为
parser
的包,也会成功。也许只是测试重命名包是否解决了问题。我知道它在Linux上成功了,但在Windows安装中可能有另一个名为
parser
的包,但不是Linux包。