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,一经查实,立即删除!

相关文章

[Webapp]国内移动端浏览器占比

1. 国内移动端浏览器占比 Source: StatCounter Global Stats - Mobile Browser Market Share US及IOS、Android自带浏览器占据90%的市场份额 中国各手机浏览器的用户渗透率 2. 源自2012年中国手机浏览器市场集中度较高。源自《中国手机浏览器用户行为研究报告》 根据调查UC…

java比较三个数的编程_java编程基础篇--------- 编写一个程序,从键盘输入三个整数,求三个整数中的最小值。...

编写一个程序,从键盘输入三个整数,求三个整数中的最小值。 关键:声明变量temp 与各数值比较。 package Exam01; import java.util.Scanner; public class Topic03 {public static void main(String[] args) {// TODO Auto-generated method stubint a,b,c; //输入 Scanner…

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

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

定义线性表

定义线性表转载于:https://www.cnblogs.com/LoveFishC/archive/2012/09/27/3845781.html

64位系统好不好用java_64位系统环境时Java的性能

如果你要买一辆车而且你的首要目标是性能或者更具体的说是原始动力,那么在4缸发动机和8缸发动机之间选择的话,答案很显然,因为越大越好。通常而言,当我们看计算机配置列表或者产品宣传的时候,64位的性能也比32位有优势…

删除重复的数据

delete sfz where sf_id not in( select min(sf_id) as autoID from sfz group by 合同编号,姓名 )转载于:https://www.cnblogs.com/MyBeN/archive/2012/09/27/2705709.html

对lIKE语句的优化

在大表中,进行模糊查询,一般情况下是用LIKE%%,但是这个东西走的是全表扫描,如果在数据量非常大的情况下,效率特别慢,因此,尝试用ORACLE函数INSTR()来解决。 实验步骤如下&#xff1a…

java 计算 时间差_Java8 时间差计算

方式一:/*** DateTimeFormatter java 8 线程安全* throws Exception*/Testpublic void testTimeDiff() throws Exception {// DateTimeFormatter formatter DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.of("Asia/Shanghai…

java spring druid_Spring配置Druid连接池

最近项目用c3p0数据连接池有问题,因此换成了druid连接池,它的优点是可以很好的监控DB池连接和SQL的执行情况。在此做个记录便于下次使用。1、首先导入Spring(网上很多这里我就不列举了)和Druid(druid-1.0.9.jar)的相关jar包2、在web.xml中搭建Spring和Dr…

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

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

Java获取本地ip方法_Java获取本地IP方法详解

获取本地服务器IP经常会出现127.0.0.1,0:0:0:0:0:0:0:1,fe80:0:0:0:960:74bd:e1a0:e5b9%11 这些情况,以下代码可解决此问题public static void main(String[] args) {try {Enumeration enumeration NetworkInterface.getNetworkInterfaces()…

记录android点滴(一)--通过build.prop实现产品定制的方法

1、通过build.prop实现产品定制的方法: 1)以编译模拟器的Generic版本为例,system.prop文件处 于以下位置(相对于工程根目录): ./build/target/board/generic/system.prop 里面的内容如下: # # s…

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

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

java 图片上传 预览 demo_图片上传预览

【实例简介】实现图片上传预览,可以增加新的空数组,并上传和替换。还有删除功能;提交的时候,还可以判断是否有空的img【实例截图】【核心代码】613ddc50-96b8-4197-ba2e-1e84f3346fb9└── demo├── assets│ ├── css│ …

ADO连接各种数据库

通过ADO连接各种数据库的字符串集 海南省信息服务中心 温大文 在网络编程过程中,ADO(Activex Data Object)编程往往是不可少的工作,特别是开发电子商务网站。既然讲到ADO数据对象,那么就顺便简单地介绍一下ADO数据对象…