导入与系统模块具有相同名称的模块

Fal*_*gel 3 python django importerror pythonpath

我的情况类似于这个问题中的一个......区别在于,

在我们的python/django项目中,我们有一个名为utils的目录,它保留了基本功能......

有时,我们需要通过从控制台运行来测试一些模块

python myproject/some_module.py
Run Code Online (Sandbox Code Playgroud)

这一切都很好,直到python尝试从我们的 utils目录导入一些内容...

from utils.custom_modules import some_function
ImportError: No module named custom_modules
Run Code Online (Sandbox Code Playgroud)

我检查了我的python路径,我们的项目在列表中,项目文件下的每个文件夹都有__init__.py文件,当我在项目目录中运行ipython时...一切正常,否则,python从其自己的utils目录导入...

我的同事使用sama方法没有任何问题,但它会引发ImportError我的环境......我们所有人都缺少的问题是什么?

更新:我的项目目录,每个子目录都有__init__.py文件,我可以从我的项目中导入其他模块没有任何问题...当我在一个不同的文件夹比我的procekt和我运行ipython,这样的导入没有问题...

from someothermodule.submodule imprort blahblahblah
Run Code Online (Sandbox Code Playgroud)

但是,当涉及到导入utils时,它失败了......

更新2:导致问题的原因是django文件夹下的utils目录,它也在python路径中...

agf*_*agf 6

有关语义,请参阅PEP关于绝对和相对导入的信息.你可能想要

from .utils.custom_modules import some_function
Run Code Online (Sandbox Code Playgroud)

如果你在包裹顶层的文件中.

编辑:这只能从包内完成.这是有充分理由的 - 如果你要导入属于你项目的东西,那么你已经把它当作一个Python包来处理它,你应该把它当作一个.您可以通过向__init__.py项目目录添加文件来完成此操作.

编辑2:你完全改变了这个问题.有可能解决这个问题,但正确的做法是不要像内置包那样引用你的包装.您可能需要重命名utils,或使其成为另一个包的子包,这样你就可以不冲突的名称(如引用它from mydjangoapp.utils.custom_modules import some_function).