PyCharm错误:'当试图导入自己的模块时(python脚本)

我已经写了一个模块(一个文件my_mod.py文件驻留在文件夹my_module)。 目前,我正在文件cool_script.py中工作,该文件位于文件夹cur_proj中。我已经在PyCharm中使用File - open打开了文件夹(我假设,因此,这是一个PyCharm项目)

在ProjectView (CMD-7)中,我可以看到我的项目cur_proj(红色),在“外部库”下,我确实看到了my_module。在cool_script.py中,我可以写

from my_module import my_mod as mm

和PyCharm甚至为my_mod提供建议。到目前为止一切顺利。

然而,当我试图运行cool_script.py时,PyCharm告诉我 "No module named my_module" .

这对我来说很奇怪,因为

A)在终端(OS 10.10.2),在python中,我可以导入模块没有问题——在.bashrc中的PYTHONPATH中有相应的条目

B)在PyCharm - Settings - Project cur_proj - Project Interpreter - CogWheel旁边的python Interpreter - more -显示所选解释器图标的路径,来自PYTHONPATH的路径确实出现(我认为它们应该出现)

因此,为什么我得到错误时,我试图运行cool_script.py?——我错过了什么?

注:

附录2015 - 2月25

当我在PyCharm中运行—编辑配置时,对于我当前的项目,有两个选项被选中,并带有复选标记:“将内容根添加到PYTHONPATH”和“将源根添加到PYTHONPATH”。当我都未选中时,我可以加载我的模块。

所以它现在工作了——但是为什么?

进一步的问题出现了:

  • 什么是“内容根”,什么是“源根”?为什么在PYTHONPATH中添加东西会使它以某种方式崩溃?
  • 我是否应该一直不勾选这两个选项(在默认情况下也是如此,而不仅仅是项目特定的配置(运行/调试配置对话框的左侧面板)?
255602 次浏览

my_module是一个文件夹而不是一个模块,你不能导入文件夹,试着将my_mod.py移动到与cool_script.py相同的文件夹中,然后执行__abc3。这是因为python只在当前目录和sys.path中查找,因此不会找到my_mod.py,除非它在同一目录中

或者你可以在在这里中找到一个答案,告诉你如何从其他目录导入。

至于你的其他问题,我不知道,因为我没有使用PyCharm。

内容根是存放项目代码的文件夹,而源根的定义也是一样的。我所理解的唯一区别是,源根中的代码是在内容根中的代码之前构建的。

取消勾选它们不会影响运行时,直到你不在包中创建手动连接到Django的单独模块。这意味着如果你的文件中没有包含'from django import…'或者没有通过django调用任何函数,取消选中这两个选项将导致故障。

更新-只有在使用Virtual Environmanet时才会出现问题,并且只有在通过所提供的终端控制项目时才会出现问题。因为终端仍然通过默认的系统pyhtonpath工作,而不是虚拟环境。而python django控制面板工作正常。

这可能是因为Python解释器找不到你的代码。你必须显式地向Python提到在这个位置找到你的代码。

这样做:

  • 转到python控制台
  • sys.path.extend(['your module location'])添加到Python控制台。

在你的情况下:

  • 打开python控制台,
  • 开始时,写以下代码:

    import sys
    sys.path.extend([my module URI location])
    
  • Once you have written this statement you can run following command:

    from mymodule import functions
    

我也得到了“将源根添加到PYTHONPATH”的错误。我的问题是我有两个名称相同的文件夹,如project/subproject1/thing/srcproject/subproject2/thing/src,我把它们都标记为源根。当我将其中一个"thing"文件夹重命名为"thing1"(任何唯一的名称)时,它起作用了。

也许如果PyCharm自动添加所选的源根目录,它就不会使用完整路径,因此会混淆同名文件夹。

如果你自己的模块在相同的路径中,你需要将路径标记为Sources Root。在项目资源管理器中,右键单击要导入的目录。然后选择Mark Directory AsSources Root

必须完成的关键令人困惑的步骤是为您试图执行的源文件重新创建运行配置,以便IDE选择新的路径。

对我来说有效的方法是运行/编辑配置…,在左侧选择要运行的文件的配置,取消选中“将源根添加到PYTHONPATH”框,保存,然后返回选中该框并保存。然后它就会起作用。

我所尝试的是找到我的文件所在的位置。

例如E:\git_projects\My_project\__init__.py is my location.

我去到文件->设置->项目:My_project ->项目结构,并添加内容根提到的地方E:\git_projects\My_project

这对我很管用。

Pycharm 2017.1.1

  1. 点击View->ToolBar &View->Tool Buttons
  2. 在左窗格中Project将是可见的,右击它和 新闻Autoscroll to source 然后运行代码

这对我很管用。

PyCharm社区/专业2018.2.1

我刚才遇到了这个问题,我可以用@Beatriz Fonseca和@Julie指出的类似方式来解决它。

如果你去File ->SettingsProject: YourProjectNameProject Structure,你将有一个你当前工作的项目的目录布局。你必须遍历你的目录,并将它们标记为所有源文件的Source目录,或严格用于导入的文件的Resource文件夹。

你还需要确保你将__init__.py文件放在你的资源目录中,或者你想要导入的任何地方,它会工作得很好。

不需要将目录标记为源根的解决方案是编辑运行配置,并在执行中选择“重定向输入”选项,并选择您想要运行的脚本。这是可行的,因为它被视为脚本在此目录中以交互方式运行。然而,Python仍然会用错误“no module named x”标记模块名:

重定向输入from:

当解释器执行import语句时,它会在从以下来源组装的目录列表中搜索x.y:

  1. 运行输入脚本的目录,如果解释器以交互方式运行,则为当前目录
  2. PYTHONPATH环境变量中包含的目录列表(如果设置了)。
  3. 安装Python时配置的依赖于安装的目录列表,在我的例子中是Ubuntu上的usr/lib/python3.6。

Ln -s。someProject

如果你有someDirectory/someProjectDir和两个文件,file1.py和file2.py, file1.py尝试用这一行导入

从someProjectDir导入file2

它不会工作,即使你已经指定someProjectDir作为源目录,即使它显示在首选项,项目,项目结构菜单作为内容根。它将工作的唯一方法是通过链接如上所示的项目(unix命令,在mac中工作,不确定Windows的用法或语法)。 由于软链接是由Pycharm在一个依赖的项目中创建的,因此似乎有一些机制,Pycharm可以在版本控制的签出或作为上下文根自动执行此操作。因此,只是复制相同的,尽管奇怪的复制目录是恼人的,必要性是令人困惑的。同样在auto创建的依赖项中,它不会显示为版本控制下的新目录。也许比较。idea文件会透露更多信息。< / p >

对我有效的答案确实是OP在2015年更新中提到的:在Python运行配置中取消这两个盒子:

  • 将内容根添加到PYTHONPATH
  • “向PYTHONPATH添加源根”

我已经将运行配置设置为使用适当的venv,因此PyCharm做额外的工作来将东西添加到路径中是没有必要的。相反,它导致了错误。

如果你去

->设置->项目:My_project ->项目结构,

只需找到源代码所在的目录,并将其标记为“Sources”(你可以在同一个窗口上看到它)。包含源代码的目录应该变成蓝色。现在你可以导入位于相同目录的模块。

始终将导入目录上方的目录标记为源根目录!

如果结构是

parent_folder/src/module.py

你必须写一些像这样的东西:

from src.module import function_inside_module

并将parent_folder标记为“源文件夹”;在PyCharm

PyCharm 2021.2.4—2022年3月4日

通过将源目录标记为“Source"”来解决这个问题。通过

  • 右键单击IDE左侧Project结构中的源目录。我有一个名为src /的代码源。

  • 导航到“标记目录为”;

  • < p >选择“Source"作为目录类型。

简而言之,

src -> Mark Directory as -> Source

如果您正在运行与其父目录同名的python文件,并试图导入另一个目录,则可能会发生这种情况

如。

假设你有文件

my_project/processing/method1/processing.py
my_project/processing/algorithms/predict.py

在processing.py中,你会这样做:

from my_project.processing.algorithms.predict import Predict

它将抛出错误

尝试使用"terminal"在pycharm

Python -m PIP安装你的模块