我编写了一个模块(文件my_mod.py
中的文件my_module
文件)。
目前,我正在使用位于cool_script.py
文件夹中的文件cur_proj
。我已经使用File - open打开了PyCharm中的文件夹(我假设它是一个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告诉我 "没有名为my_module的模块"
这对我来说很奇怪,因为
A)在终端(OS 10.10.2)中,在python中,我可以导入模块没问题 - .bashrc中的PYTHONPATH中有相应的条目
B)在PyCharm中 - 设置 - 项目cur_proj - 项目解释器 - 在python解释器旁边的CogWheel - 更多 - 显示所选解释器图标的路径,PYTHONPATH的路径确实出现(我认为应该这样)
因此,当我尝试运行cool_script.py时,为什么会出现错误? - 我缺少什么?
注意:
my_module
is correct my_module
和cur_proj
__init__.py
files (empty files)
virtualenv
当我进入PyCharm运行 - 编辑配置时,对于我当前的项目,有两个选项带有复选标记:" 将内容根添加到PYTHONPATH &# 34;和" 将源根添加到PYTHONPATH "。当我同时取消选中时,我可以加载我的模块。
所以它现在有效 - 但为什么?
出现了进一步的问题:
答案 0 :(得分:236)
如果您自己的模块位于同一路径中,则需要将路径标记为Sources Root
。在项目资源管理器中,右键单击要导入的目录。然后选择Mark Directory As
并选择Sources Root
。
我希望这会有所帮助。
答案 1 :(得分:15)
我现在遇到这个问题,并且能够以类似于@Beatriz Fonseca和@Julie指出的方式解决它。
如果您转到File
-> Settings
-> Project: YourProjectName
-> Project Structure
,则将拥有当前正在处理的项目的目录布局。您将必须遍历所有目录,并将其标记为所有源文件的Source
目录,或对于严格导入的文件标记为Resource
文件夹。
您还需要确保将__init__.py
文件放置在资源目录中,或者实际上是要导入的任何位置,并且可以很好地工作。
我希望这个答案对某人有帮助,并希望JetBrains可以解决此烦人的错误。
答案 2 :(得分:6)
我尝试的是获取文件所在的位置。
e.g。 E:\git_projects\My_project\__init__.py is my location.
我去了文件 - >设置 - >项目:My_project - >项目结构并将内容根添加到提及地点E:\git_projects\My_project
它对我有用。
答案 3 :(得分:4)
my_module
是一个文件夹而非模块,您无法导入文件夹,请尝试将my_mod.py
移至与cool_script.py
相同的文件夹,然后执行import my_mod as mm
}。这是因为python只查找当前目录和sys.path
,因此除非它在同一目录中,否则不会找到my_mod.py
或者您可以查看here以获取答案,告诉您如何从其他目录导入。
关于你的其他问题,我不知道,因为我不使用PyCharm。
答案 4 :(得分:2)
当Python解释器无法找到您的代码时,可能会导致这种情况。您必须明确提及Python才能在此位置找到您的代码。
这样做:
sys.path.extend(['your module location'])
添加到Python控制台。在你的情况下:
一开始,请写下以下代码:
import sys
sys.path.extend([my module URI location])
编写完此语句后,您可以运行以下命令:
from mymodule import functions
答案 5 :(得分:2)
我也收到了“将源根添加到PYTHONPATH”的错误。我的问题是我有两个同名的文件夹,如project/subproject1/thing/src
和project/subproject2/thing/src
,我将它们都标记为源根。当我将其中一个"thing"
文件夹重命名为"thing1"
(任何唯一名称)时,它就可以了。
也许如果PyCharm自动添加选定的源根,它不会使用完整路径,因此会混合使用相同名称的文件夹。
答案 6 :(得分:2)
必须完成的关键混乱步骤是重新创建您尝试执行的源文件的运行配置,以便IDE选择新路径。
实际对我有用的方法是转到运行/编辑配置...,选择您尝试在左侧运行的文件的配置,取消选中“将源根添加到PYTHONPATH”框,保存,然后返回并选中该框并保存。然后它会工作。
答案 7 :(得分:1)
所以,如果您去
->设置->项目:My_project->项目结构,
仅提供源代码所在的目录,并将其标记为“源”(您可以在同一窗口中看到它)。带有源代码的目录应变为蓝色。现在,您可以导入位于相同目录中的模块了。
答案 8 :(得分:1)
始终将导入上方的目录标记为源根!
如果结构是
parent_folder/src/module.py
您必须输入以下内容:
from src.module import function_inside_module
,并在PyCharm中将parent_folder
标记为“源文件夹”
答案 9 :(得分:0)
内容根是包含项目代码的文件夹,而源根也定义为相同。我理解的唯一区别是源根中的代码是在内容根中的代码之前构建的。
取消选中它们不会影响运行时,直到您没有在包中手动连接到Django的单独模块。这意味着如果你的任何文件没有保存'from django import ...'或者没有通过django调用任何函数,则取消选中这两个选项将导致故障。
更新 - 只有在使用Virtual Environmanet时才会出现此问题,并且仅在通过提供的终端控制项目时才会出现此问题。因为终端仍然通过默认系统pyhtonpath工作,而不是虚拟环境。而python django控制面板工作正常。
答案 10 :(得分:0)
View->ToolBar
和View->Tool Buttons
Project
上将可见,右键单击它,然后
按Autoscroll to source
然后运行您的代码。这对我有用。
答案 11 :(得分:0)
无需将目录标记为源根即可解决此问题的方法是编辑运行配置,然后在执行中选择“重定向输入自”选项,然后选择要运行的脚本。之所以可行,是因为随后将其视为在此目录中以交互方式运行了脚本。但是,Python仍会使用错误“没有名为x的模块”来标记模块名称:
解释器执行import语句时,它将在从以下来源汇编的目录列表中搜索x.py:
答案 12 :(得分:0)
ln -s。 someProject
如果您有someDirectory / someProjectDir和两个文件,file1.py和file2.py,以及file1.py尝试使用此行导入
来自someProjectDir导入文件2
即使您将someProjectDir指定为源目录,并且即使在首选项中将项目,项目结构菜单显示为内容根,也无法使用。它将起作用的唯一方法是通过链接如上所示的项目(unix命令,在Mac中工作,不确定Windows的使用或语法)。 由于软链接是由Pycharm在相关项目中创建的,因此似乎存在某种机制,Pycharm会在从版本控制中签出或添加为上下文根时自动执行此操作。因此,尽管复制了相同的内容,但奇怪的是目录的复制令人烦恼,而必要性却令人困惑。同样在自动创建的依赖项中,它在版本控制下也不显示为新目录。 .idea文件的比较可能会发现更多。
答案 13 :(得分:0)
最有效的答案确实是OP在他2015年的更新中提到的:在Python运行配置中取消选中these two boxes:
我已经将run config设置为使用正确的venv,因此PyCharm不需要做额外的工作来向路径添加内容。相反,它导致了错误。
答案 14 :(得分:0)
工作目录设置不正确时,我收到此错误。这很奇怪,因为它是一个全新的安装,而且我想不出为什么PyCharm会使用某个随机目录作为项目的工作目录而不是根目录的原因