前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python import同级modul

Python import同级modul

作者头像
py3study
发布2020-01-07 16:14:31
8070
发布2020-01-07 16:14:31
举报
文章被收录于专栏:python3python3

    看了一段Python的基础视频,正好赶上单位需要做个小工具。索性拿它练练手,刚刚开动就遇到一个新的问题:目录引用。简单的说,就是将不同的功能代码,分到不同的目录文件中,代码中涉及到同级目录调用,问题就出来了“SystemError: Parent module '' not loaded, cannot perform relative import”。

    先看一下目录结构:

wKioL1RmF5KTx50sAAEPQLnI4vw282.jpg
wKioL1RmF5KTx50sAAEPQLnI4vw282.jpg

OperateExcel.py

代码语言:javascript
复制
#!F:/Python/python


from ..Model.ObjectFile import *

def showMessage():
	print('OperateExcel file is Load')

ObjectFile.py

代码语言:javascript
复制
def showMessage():
	print('Object File is running!')

在python环境调用提示:

Traceback (most recent call last):

  File "Operate/OperateExcel.py", line 4, in <module>

    from ..Model.ObjectFile import *

SystemError: Parent module '' not loaded, cannot perform relative import

查阅了一些资料,发现问题在于引用路径上,就是OperateExcel.py 的

代码语言:javascript
复制
from ..Model.ObjectFile import *

修改OperateExcel.py 查看一下,该文件在启动时加载了哪些路径。

修改代码如下:

代码语言:javascript
复制
#!F:/Python/python


# from ..Model.ObjectFile import *

# def showMessage():
# 	print('OperateExcel file is Load')


import sys,pprint

pprint.pprint(sys.path)

打印输出默认调用路径:

['F:\\Python\\Project\\ExcelOperateProject\\Operate',

 'C:\\Windows\\system32\\python33.zip',

 'C:\\Python33\\DLLs',

 'C:\\Python33\\lib',

 'C:\\Python33',

 'C:\\Python33\\lib\\site-packages']

问题貌似明朗化,加载时未找到加载的路径。曾经尝试修改Operate目录下的__init__.py文件(该文件默认为空)。

代码语言:javascript
复制
import sys
sys.pate.append('F:\\Python\\Project\\ExcelOperateProject\\Model',
 
)

调用OperateExcel.py输入如下:

['F:\\Python\\Project\\ExcelOperateProject\\Operate',

 'C:\\Windows\\system32\\python33.zip',

 'C:\\Python33\\DLLs',

 'C:\\Python33\\lib',

 'C:\\Python33',

 'C:\\Python33\\lib\\site-packages']

(对于__init__还停留在初级阶段,如有使用不当还请批评指正)。

问题原因已经明确,即文件调用未加载指定路径,造成编译错误。经过度娘查询一些以往大神的经验。发现主要问题在于同级module无法直接调用。需要先找到上一级的module而后查询到调用的内容。前提你的执行文件目录不能与你的引入文件同级。所以我修改一下目录结构如下:

wKioL1RmzWCwxHhgAACPBAuBq8c551.jpg
wKioL1RmzWCwxHhgAACPBAuBq8c551.jpg

将Model目录、Operate目录封装到package目录下,并且在package目录下创建空的__init__.py文件(这个很重要,否则在跨模块调用时会提示错误,因编译程序未将package看作是module)。然走在ExcelOperateProject目录下建立main.py调用package/Operate/OperateExcel.py代码如下:

代码语言:javascript
复制
from package.Operate import OperateExcel

OperateExcel.showMessage()

调用成功!哇哈哈!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-09-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档