Python中关于PyCharm导入自定义模块的问题求助!

http://p1.bqimg.com/1949/d47e9f7237c99ae4.png

http://p1.bqimg.com/1949/e97af30172ba6985.png

用的python版本是3.5.2

第一章图是我导入模块时报的错。简要说明下: 用 from apis import APIError pycharm 直接提示模块找不到,于是用 from .apis import APIError pycharm 虽然没有提示有问题,但是运行是报 SystemError: Parent module '' not loaded, cannot perform relative import 。图中我都用箭头标出来了。

第二张图是 pycharm 的默认配置。

我用 from .apis import APIError 意思不就是导入当前路径下的模块么,为什么运行时报错呢?这个问题怎么解决呢,各位帮忙下!感谢!


Python中关于PyCharm导入自定义模块的问题求助!

18 回复

pycharm 版本是 2016.2.3


我无法理解你的问题

自定义模块要放在一个 package 中,也就是文件夹中必须有一个__init__.py 才能作为自定义包来引用

要理解什么是包, 何为 init.py

http://p1.bpimg.com/1949/dccbaca1022f7cc1.png 为什么我改成这样就可以了?并没有加__init__.py ,用 from apis import APIError ,虽然 pycharm 提示找不到模块,但是代码却正确执行了?我现在的所有代码都是在 www 同一个目录下的

http://p1.bpimg.com/1949/dccbaca1022f7cc1.png 为什么我改成这样就可以了?并没有加__init__.py ,用 from apis import APIError ,虽然 pycharm 提示找不到模块,但是代码却正确执行了?我现在的所有代码都是在 www 同一个目录下的

看错了,尴尬,无视我#2 那句

因为 IDE 的搜索路径应该是以 mblog 为根目录的。所以提示找不到模块,其实我平常都是忽略这些检查的

http://p1.bpimg.com/1949/dccbaca1022f7cc1.png 为什么我改成这样就可以了?并没有加__init__.py ,用 from apis import APIError ,虽然 pycharm 提示找不到模块,但是代码却正确执行了?我现在的所有代码都是在 www 同一个目录下的

懂了!所以可以在 www 目录下建个__init__.py 这样导入 from www.apis imprt APIError.那么导入同一个目录下的文件,不需要__init__.py ,因为并没有跨 package 导入。是吗?

我记得 pycharm 可以自定义项目根目录的功能,你可以查查看

是这个吧
www - right click - Mark Directory As - Sources Root

mark directory as source root ?

from .apis import APIError 是相对引用, 把点去掉就可以了.

把点去掉是可以,但是 pycharm 又提示出错,可以我导入那些别人写好的包像 from redis import StrictRedis,pycharm 不会报错也能运行,为何导入自己相对路径下的 pycharm 就提示出错呢?

我明白了,原来是要 pycharm 可以对某个文件夹设置为 root,就不会报错了,如果是要引用 root 下的子文件夹下的文件,那么就要在这个子文件夹下添加__init__.py 文件才能执行,不能添加__init__.py 文件 pycharm 不会报错,但是无法执行,会提示找不到模块。

回到顶部