Python导包模块报错的问题解决

Python导包模块报错的问题

Moelimoe

import报错No module named "xxx"的问题
如何将指定目录作为项目根目录,让项目根目录下的包/模块都可以直接导入?(linux下)
Python导入模块时,解释器如何定位模块:
1.当前目录
2.内置模块列表
3.sys.path列表的目录

由于python没有定位到模块目录时出现的No module named "xxx"问题,大概有两种解决思路:
1.在sys.path永久加入需要导入的模块的父目录;2.每次要导入时在执行的py文件中执行sys.path.append方法将需要导入的模块的父目录加入到sys.path

问题和解决示例:
永久将某个目录加入到sys.path让这个目录下的py文件在导包时python的finder可以直接查找到

Desktop/pytest/下两个各包含一个py文件的文件夹:
    test/test.py    
    path_test/path_test.py

# test.py
print("test")

# path_test.py
from test import test

目标:在目录path_test下执行python3 path_test.py,应该打印出字符串test(一般情况下未配置.../pytest/作为源目录时会出现报错No module named “test” 或者ImportError之类的)

将指定目录加入到sys.path(永久或者临时),作为某个项目的源目录(source root)的方法步骤:

进入pytest/目录在终端输入pwd命令获取到pytest/的绝对路径:
/home/image/Desktop/pytest
查看和复制python3的sitepackage路径:
>>python3
>>import site
>>site.getsitepackages()
['/usr/local/lib/python3.8/dist-packages', '/usr/lib/python3/dist-packages', '/usr/lib/python3.8/dist-packages']

复制sitepackages所在路径,根据自己实际要使用的python版本为准,这里我复制的是第一个:
/usr/local/lib/python3.8/dist-packages

进入上面复制的目录下cd /usr/local/lib/python3.8/dist-packages
创建并编辑一个.pth文件
(sudo) vim /usr/local/lib/python3.8/dist-packages/xxx.pth
xxx是你的文件命名
在xxx.pth文件中加入需要添加的项目根目录的路径:

验证看是否目录添加到sys.path成功
>>python3
>>import sys
>>sys.path
['', '/usr/lib/python38.zip', '/usr/lib/python3.8', '/usr/lib/python3.8/lib-dynload', '/usr/local/lib/python3.8/dist-packages', '/home/image/Desktop', '/home/image/Desktop/pytest', '/usr/lib/python3/dist-packages']

倒数第二个路径/home/image/Desktop/pytest是刚刚加进去的
在Desktop/pytest/path_test/目录下执行:

>>>python3 path_test.py

看起来在 应该可以导入然后打印字符串test,但是却出现了ImportError:

Traceback (most recent call last):
  File "path_test.py", line 5, in <module>
    from test import test
ImportError: cannot import name 'test' from 'test' (/usr/lib/python3.8/test/__init__.py)
经过一番检查之后,发现似乎是在找到sys.path的路径之前,在内置模块匹配到了另外一个名为test的模块,然后没有找到需要的/test/test.py,于是想到了解决方法
修改名称目录Desktop/pytest/test/的名称,例如Desktop/pytest/example/:
mv test/ example/

同时path_test.py中代码修改为from example import test

然后再运行:

>>>python3 path_test.py
test

发现正常运行,打印了字符串test

临时将指定目录加入到sys.path让python finder可以在导包时可以直接查找到的方法
不修改文件夹名称,单个py文件的一次性解决方法,注意把路径插入到sys.path列表的第一位而不是append
这个时候直接在代码里执行sys.path.insert(0, ‘/home/image/Desktop/pytest’),可以对于本test.py文件奏效

(0)

相关推荐

  • 浅谈python编译pyc工程--导包问题解决

    利用python 编译工程,生产pyc文件 pyc文件好处:是一种二进制机器码,并且隐藏了源文件代码,但是有和py文件一样的功能(可以理解为效果一样) 所以可以将代码隐藏,便于商业价值,保护代码隐私还能和py文件一样可运行 import compileall compileall.compile_dir(r'/path') 所以在一些情况下,需将源文件工程批量生成pyc文件来隐藏代码. 上面代码即为 批量生成pyc的脚本更改path路径为根目录即可(根目录为最顶层目录需包括所有用到的文件) 运行

  • python导包的几种方法(自定义包的生成以及导入详解)

    python是一门灵活的语言,也可以说python是一门胶水语言,顾名思义,就是其可以导入各类的包,python的包可以说是所有语言中最多的.当然导入包大部分是为了更快捷,更方便,效率更高.对于刚入门的python爱好者来说最初接触的应该是import直接导入包的方式,例如 import time,就是导入了python的time包,这个包中的方法可以处理大部分我们项目中遇到的关于时间的问题. 下面我会详细介绍几种导入包的方式(在开发过程中绝对够用)以及怎样把其他文件夹中的python模块生成我

  • 浅谈Python脚本开头及导包注释自动添加方法

    1.开头:#!/usr/bin/python和# -*- coding: utf-8 -*-的作用 – 指定 #!/usr/bin/python 是用来说明脚本语言是python的 是要用/usr/bin下面的程序(工具)python,这个解释器,来解释python脚本,来运行python脚本的. #!/usr/bin/python:是告诉操作系统执行这个脚本的时候,调用 /usr/bin 下的 python 解释器: #!/usr/bin/env python(推荐):这种用法是为了防止操作系

  • Python导包模块报错的问题解决

    Python导包模块报错的问题 Moelimoe import报错No module named "xxx"的问题如何将指定目录作为项目根目录,让项目根目录下的包/模块都可以直接导入?(linux下)Python导入模块时,解释器如何定位模块:1.当前目录2.内置模块列表3.sys.path列表的目录 由于python没有定位到模块目录时出现的No module named "xxx"问题,大概有两种解决思路:1.在sys.path永久加入需要导入的模块的父目录:2

  • Python multiprocess pool模块报错pickling error问题解决方法分析

    本文实例讲述了Python multiprocess pool模块报错pickling error问题解决方法.分享给大家供大家参考,具体如下: 问题 之前在调用class内的函数用multiprocessing模块的pool函数进行多线程处理的时候报了以下下错误信息: PicklingError: Can't pickle <type 'function'>: attribute lookup __builtin__.function failed 查了下官方文档发现python默认只能pi

  • Python使用pickle模块报错EOFError Ran out of input的解决方法

    本文实例讲述了Python使用pickle模块报错EOFError Ran out of input的解决方法.分享给大家供大家参考,具体如下: 遇到了 EOFError:Ran out of input 不到为什么这样,最后用捕获异常的办法解决掉了,暂时对程序本身没有啥影响,代码如下: # coding=utf-8 import pickle def usr_date(): try: with open('usr_date.pkl','rb') as f: return pickle.load

  • 执行Python程序时模块报错问题

    1. 在执行python程序时遇到 'ModuleNotFoundError: No module named 'xxxxx'' : 例如: 图片中以导入第三方的 'requests' 模块为例,此报错提示找不到requests模块.在python中,有的 模块是内置的(直接导入就能使用)有的模块是第三方的,则需要安装完成后才能导入使用,若未 安装直接导入使用就会出现上述报错!这里介绍最快的解决方法: 1)通过 pip (python软件包工具) 来安装所需要使用的第三方模块: 打开cmd输入

  • Python OpenCV读取视频报错的问题解决

    最近由于项目的需要,经常需要使用opencv读视频操作,会经常遇到一个问题,就是视频读完之后会出现报错的情况,虽然不影响代码结果,但是对于吹毛求疵的我实在忍受不了. 会报错的程序: # -*-coding:utf-8-*- """ File Name: read_video.py Program IDE: PyCharm Create File By Author: Hong """ import cv2 def read_video(video

  • Python读取xlsx文件报错:xlrd.biffh.XLRDError: Excel xlsx file;not supported问题解决

    目录 发现错误 (1)检查第三方库xlrd的版本: (2)别忘了修改import名称与调用的包名称 总结 发现错误 利用Python库xlrd中的xlrd.open_workbook()函数读取自定义xlsx表格文件时出错如下: Traceback (most recent call last):  File "C:/Users/llll/PycharmProjects/pythonProject1/RandomForestRegression.py", line 96, in <

  • python 服务器运行代码报错ModuleNotFoundError的解决办法

    一.问题描述 一段 Python 代码在本地的 IDE 上运行正常,部署到服务器运行后,出现了 ModuleNotFoundError: No module named 'xxx' 错误. 二.问题原因 在代码中引入了其他文件的包(自己写的包,非 pip 安装的),问题出在 import 那行语句. 错误的原因是因为路径的原因,服务器端的路径和我们本地的路径不一样显示. 三.解决示例 要解决这个问题,可以在自己代码的顶端加入以下代码: import sys import os sys.path.

  • Python编程源码报错解决方法总结经验分享

    目录 一.前言 二.解决过程 三.总结 一.前言 最近本都是开开心心的打开电脑写一些祖传BUG 但一个报错阻碍了我写BUG的进度! 这年代还有能阻碍我写BUG的报错??? 二.解决过程 一个新项目要做token认证,所以拷了原来的项目代码 没错,高级CV工程师就是我!!! 加入了一些token配置信息后,启动项目准备调试. 启动很成功没有任何报错. 然后启动前端项目开始一天的写BUG时间! 结果登录的时候就报错了!! 把之前项目的代码拷过来还会报错? 有点奇怪,但都是小场面! 开始调试 结果一看

  • Python使用pip安装报错:is not a supported wheel on this platform的解决方法

    本文讲述了Python使用pip安装报错:is not a supported wheel on this platform的解决方法.分享给大家供大家参考,具体如下: 可能的原因1:安装的不是对应python版本的库,下载的库名中cp27代表python2.7,其它同理. 可能的原因2:这个是我遇到的情况(下载的是对应版本的库,然后仍然提示不支持当前平台) 在https://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy中,我下载到的numpy库文件名: n

  • Idea跑的项目没问题将程序install成jar包运行报错空指针的问题

    在idea运行的程序导成jar包之后,执行程序会出现不一样的情况 首先idea运行是没问题的,我们断点看看: 然后install打包jar 以上就是实战中遇到的问题,我感觉很无奈,传入的数据是一样的,但为啥在idea中可以运行的程序使用jar包就出错了 然后我咨询了大佬,立马找到原因了 我把那段代码挪进main方法执行确实发现有些问题,然后百度了一下,最后修改成这样 重新打包jar居然成功了 总结 到此这篇关于Idea跑的项目没问题将程序install成jar包运行报错空指针的问题的文章就介绍到

随机推荐