求助!关于 pycharm 导入自定义模块的问题!

2017-03-13 17:34:28 +08:00
 Tianny

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 意思不就是导入当前路径下的模块么,为什么运行时报错呢?这个问题怎么解决呢,各位帮忙下!感谢!

8932 次点击
所在节点    Python
17 条回复
Tianny
2017-03-13 17:46:49 +08:00
pycharm 版本是 2016.2.3
mgna17
2017-03-13 17:53:31 +08:00
alphadog619
2017-03-13 17:55:59 +08:00
自定义模块要放在一个 package 中,也就是文件夹中必须有一个__init__.py 才能作为自定义包来引用
lgpqdwjh
2017-03-13 18:01:32 +08:00
要理解什么是包, 何为 __init__.py
Tianny
2017-03-13 18:09:25 +08:00
@mgna17 http://p1.bpimg.com/1949/dccbaca1022f7cc1.png 为什么我改成这样就可以了?并没有加__init__.py ,用 from apis import APIError ,虽然 pycharm 提示找不到模块,但是代码却正确执行了?我现在的所有代码都是在 www 同一个目录下的
Tianny
2017-03-13 18:10:32 +08:00
@lgpqdwjh http://p1.bpimg.com/1949/dccbaca1022f7cc1.png 为什么我改成这样就可以了?并没有加__init__.py ,用 from apis import APIError ,虽然 pycharm 提示找不到模块,但是代码却正确执行了?我现在的所有代码都是在 www 同一个目录下的
mgna17
2017-03-13 18:11:20 +08:00
@mgna17 看错了,尴尬,无视我#2 那句
amoyiki
2017-03-13 18:13:42 +08:00
因为 IDE 的搜索路径应该是以 mblog 为根目录的。所以提示找不到模块,其实我平常都是忽略这些检查的
Tianny
2017-03-13 18:13:53 +08:00
@alphadog619 http://p1.bpimg.com/1949/dccbaca1022f7cc1.png 为什么我改成这样就可以了?并没有加__init__.py ,用 from apis import APIError ,虽然 pycharm 提示找不到模块,但是代码却正确执行了?我现在的所有代码都是在 www 同一个目录下的
Tianny
2017-03-13 18:23:07 +08:00
@amoyiki 懂了!所以可以在 www 目录下建个__init__.py 这样导入 from www.apis imprt APIError.那么导入同一个目录下的文件,不需要__init__.py ,因为并没有跨 package 导入。是吗?
amoyiki
2017-03-13 18:27:03 +08:00
我记得 pycharm 可以自定义项目根目录的功能,你可以查查看
sunbeams001
2017-03-13 19:43:33 +08:00
是这个吧
www - right click - Mark Directory As - Sources Root
wuyadong
2017-03-13 20:33:52 +08:00
mark directory as source root ?
Tianny
2017-03-13 21:38:32 +08:00
@sunbeams001 恩恩
piapia
2017-03-16 22:54:21 +08:00
from .apis import APIError 是相对引用, 把点去掉就可以了.
chunjie
2018-04-03 01:49:28 +08:00
@piapia 把点去掉是可以,但是 pycharm 又提示出错,可以我导入那些别人写好的包像 from redis import StrictRedis,pycharm 不会报错也能运行,为何导入自己相对路径下的 pycharm 就提示出错呢?
chunjie
2018-04-03 02:19:54 +08:00
@chunjie 我明白了,原来是要 pycharm 可以对某个文件夹设置为 root,就不会报错了,如果是要引用 root 下的子文件夹下的文件,那么就要在这个子文件夹下添加__init__.py 文件才能执行,不能添加__init__.py 文件 pycharm 不会报错,但是无法执行,会提示找不到模块。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/347142

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX