python导入模块不在同一文件夹下_Python小技之自定义不同文件夹下模块导入问题...

一般在写一个项目的时候, 为了将项目模块化, 更加的清晰明了, 会将不同功能的模块放入不同的文件夹

c62058234da0273575a241cb4fa732b6.png

项目如下:

├── spider│   └── spider.py # 爬虫文件└── utils├── __init__.py└── downloads.py # 下载模块

downloads.py内容如下:

def download():print("import download")

spider.py内容如下:

from ..utils.downloads import downloaddownload()

一切看起来都是那么美好

331a29d44ed04c079836f1b7eb25fca4.png

当你试图运行

53433096d5116ba4580fed8081d1a3cb.png

问题一出现:

cd spiderpython3 spider.py

会得到:

# 相对导入超出顶级包错误Traceback (most recent call last):File "spider.py", line 7, in from ..utils.downloads import downloadValueError: attempted relative import beyond top-level package

但是你试图把相对路径去掉时, 又会得到:

# 找不到这个模块ModuleNotFoundError: No module named 'utils'

尝试解决:

在spider.py文件第一行加入:

import syssys.path.append("../")

输出:

> import download

问题二:

mgd, 终于解决了,

but, 一般爬虫脚本, 要用crontab或其他定时调用脚本时, 要使用绝对路径

在根目录或家目录下试一下:

python3 /Users/msw/Desktop/wx_post/py_module/spider/spider.py

结果, 不出意外, 咦~~~~~~~

Traceback (most recent call last):File "/Users/msw/Desktop/wx_post/py_module/spider/spider.py", line 9, in from utils.downloads import downloadModuleNotFoundError: No module named 'utils'

于是:

在spider.py再加入一行

sys.path.append("/Users/msw/Desktop/wx_post/py_module/")

在运行一下:

> import download

果然可以了, 但是不能把所有的路径都添加一边吧, 大神到这步应该就知道怎么解决了吧

3b55389636e5ec63ea00acebcf1686ff.png

解决:

其实, 说来说去, 根本问题就是脚本工作目录的问题, 也就是在那里启用的脚本

方案一:

改变目录结构, 内容保持一致, 如下:

├── spider.py└── utils├── __init__.py└── downloads.py

spider.py, 内容如下:

from utils.downloads import downloaddownload()

方案二:

目录结构保持不变

在spider/spider.py, 开始处加上以下内容:

import osimport syswork_dir, file_name = os.path.split(__file__)os.chdir(work_dir if work_dir else "./")sys.path.append("../")

其实就是改变了, 脚本工作目录

af08e4283e33f3b3a3e8a7e1ebe070ba.png

喜欢麻烦点个在看哦!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/422188.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端学习(563):干掉block重叠margin重叠

第一种方法 第二种方法 第三种方法 第四种方法

Ubuntu11.04 3945ABG无线网卡驱动安装

由于对无线上网的需求,特对Ubuntu11.04的无线驱动进行安装,一波三折。 首先是"系统设置"-->"硬件"-->"附加驱动",显示“这个系统上没有使用专有驱动”,也就是找不到3945ABG无线网卡的驱动。 …

Java连接SQL数据库失败的分析思路

简单的说下java连接SQL数据库的步骤: 1. 首先要有一个jtds.jar数据库驱动包。 2. 可先在项目下新建一个Folder,取名为lib,把jtds驱动包放到lib文件夹下。 3. 在项目上右键 build path → add External Archive 找到自己项目下刚才新建的lib文件夹&…

java验证码限流_Java实现系统限流

在微服务系统中,缓存、限流、熔断是保证系统高可用的三板斧,今天我们就来聊聊限流。限流是保障系统高可用的方式之一,当然啦也是大厂高频面试题,如果阿里的面试官问一句:“如何实现每秒钟1K个请求的限流?”…

(转)三层相关案例(及常见的错误)

原文地址:http://www.cnblogs.com/zysbk/archive/2012/10/16/2726895.html三层相关案例(及常见的错误) 今天我们再次带领大家学习三层的知识,由于三层这块的内容在工作中用的比较的多.所以,我再把登录验证密码的题目做一遍.题目中没有了验证用…

数据库的几个概念:主键,外键,索引,唯一索引

主键:主键是数据表的唯一索引,比如学生表里有学号和姓名,姓名可能有重名的,但学号确是唯一的,你要从学生表中搜索一条纪录如查找一个人,就只能根据学号去查找,这才能找出唯一的一个,…

java ee实验新闻_JAVAEE第四次作业-JSP显示新闻

JAVAEE第四次作业-JSP显示新闻一、任务使用mysql创建新闻表用户登录时,用servlet获取用户名密码,查询数据库是否存在如果是正确的用户名密码,查询新闻表,将新闻数据传给JSP首页JSP首页用EL表达式显示新闻标题列表二、任务1实验过程…

sql数据库连接不上本地数据库的解决办法

如果sql数据库连接本地的sql数据库连接不上即用.连接不上了,错误内容为: 可以执行一下以下操作:开始-sql—配置工具—sql server 外围应用配置器—服务和连接的外围应用配置器—如果服务状态为:已停止,则启动一下即可。…

前端学习(576):margin无效情形之内联特性导致无效

当负值到达一定情况开始失效 内联的特性受到限制

java windows so文件_windows下编译使用NDK,调用SO文件 | 学步园

下载后把压缩包解压出来,例如:D:\ndk,目录下的ndk-build.cmd就是用来编译的批处理命令。这里以D:\ndk\samples\hello-jni为例,打开D:\ndk\samples\hello-jni\jni\hello-jni.c查看代码:/** Copyright (C) 2009 The Andr…