我写了一个模块(文件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
Run Code Online (Sandbox Code Playgroud)
而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正确的道路__init__.py文件(空文件)放入my_module和放入cur_projvirtualenv当我进入PyCharm运行 - 编辑配置时,对于我当前的项目,有两个选项带有复选标记:" 将内容根添加到PYTHONPATH "和" 将源根添加到PYTHONPATH ".当我同时取消选中时,我可以加载我的模块.
所以它现在有效 - 但为什么呢?
出现了更多问题:
这个问题让我疯狂.我试图从同一目录中的文件导入一个类.PyCharm给了我"未解决的参考"错误.MyClass定义于file.py.

我发现了这些问题:
我有以下项目结构:

我已将src标记为源根...
我设置了"将源根添加到PYTHONPATH":
我试过File - > Invalidate Caches/Restart ..(我甚至重新启动了计算机).
如果我尝试运行它,我在控制台中收到以下错误: ImportError: cannot import name 'MyClass'
解释器是Ubuntu x64 14.04上的Python 3.4上的virtualenv.
如果我安装并导入任何第三方软件包,它们都可以正常工作.
如果我echo $PYTHONPATH在终端尝试它什么都不返回(与...相同env | grep PYTHONPATH.当我尝试这些时,我有适当的virtualenv活动.
有线索吗?
我试图简单地将文本文件的内容读取并存储到数组中,但是:
ins = open( "file.txt", "r" )
array = []
for line in ins:
array.append( line )
ins.close()
Run Code Online (Sandbox Code Playgroud)
它给了我一个"开放"的错误:
Unresolved reference 'open' less... (Ctrl+F1)
Run Code Online (Sandbox Code Playgroud)
此检查检测应解决但不能解析的名称.由于动态调度和鸭子打字,这在有限但有用的情况下是可能的.顶级和类级别项比实例项更受支持.
谁能解释我做错了什么?谢谢
我已经按照pycharm 文档来设置 IDE 来解析导入。但是,似乎每个包含 *.py 文件的文件夹都需要明确添加为“源根目录”,以便 IDE 解析所有引用。这可以从根文件夹递归完成吗?
这是让 IDE 解析所有代码库引用的正确方法,还是我没有正确设置我的项目结构?
我已经按照其他方法来解决 IDE 中的引用here和here,但无济于事。如果我手动将每个文件夹添加为“源根目录”,IDE 似乎只会解决它们。如果没有递归功能,大型代码库在设置 IDE 时会很费力!
我有一个python3脚本script.py,在其中我要实例化一个在clazz.py中定义的Foobar类。但是,当我尝试导入时,我得到:
$ python3 script.py
...
SystemError: Parent module '' not loaded, cannot perform relative import
Run Code Online (Sandbox Code Playgroud)
这是我的文件结构:
python_import/
??? __init__.py
??? clazz.py
??? script.py
Run Code Online (Sandbox Code Playgroud)
clazz.py:
class Foobar():
def __init__(self):
print("initialized a foobar")
Run Code Online (Sandbox Code Playgroud)
script.py:
from .clazz import Foobar
foobar = Foobar()
Run Code Online (Sandbox Code Playgroud)
它运行很好,如果我摆脱.的import; 但是,如果执行此操作,则我的IDE(Intellij IDEA)会以红色下划线标记导入内容,并且不会自动完成任何操作。我相信.在python3中包含正确,并且Intellij似乎很喜欢,所以除非删除它,否则为什么我的程序无法运行?
我已阅读http://www.diveintopython3.net/porting-code-to-python-3-with-2to3.html#import,http://python.readthedocs.org/en/latest/reference/import.html,如何在同一目录或子目录中导入类?,Python 3中的相对导入和Python 3中的相对导入不起作用。
我怀疑它可能与virtualenv有关,但是a)我不明白为什么工作目录不会成为PYTHONPATH的一部分,并且b)我不太确定如何在virtualenv中进行更改-Intellij设置了它为我。
我有python 3.6.我想从另一个名为'run.py'的python文件中执行名为'operation.py'的python文件.
在operation.py我做from cStringIO import StringIO.PyCharm向我显示警告,没有名为StringIO的模块.我知道,因为python3我必须从io导入StringIO模块.但是,当我使用此导入时,此模块的功能不再起作用.
虽然有一个警告from cStringIO import StringIO,代码仍然有效(我知道这个导入确实有效,因为我试图使它成为一个注释,它无法运行).问题是,当我尝试通过'run.py'文件运行此文件时,它无法运行并打印以下消息:ModuleNotFoundError: No module named 'cStringIO'.
我试图在PyCharm中使用这个未解决的参考问题,但它没有帮助.
为什么'operation.py'会运行警告,但'run.py'不会?我怎么解决这个问题?
operation.py:
from cStringIO import StringIO
str_io = StringIO()
g = Generator(str_io, False)
# There is a full code here...
Run Code Online (Sandbox Code Playgroud)
run.py:
import operation
def main():
operation
Run Code Online (Sandbox Code Playgroud)
该operation.py有一个警告,但运行良好,run.py有失败.
python ×7
pycharm ×4
python-3.x ×2
cstringio ×1
file ×1
import ×1
module ×1
python-2.7 ×1
stringio ×1