上面的原因1其实会引申出原因2, 那就是如果我引用的文件夹在10万8千里远的文件夹里, 而且是自己写的一个工程包. 并不是python安装好的工程包, 也很容易出现找不到包的报错.
首先文件找包是先通过系统路径来找的,也就是你程序的root路径,可以通过在python文件里打下面代码来查看
import sys
print(sys.path)
会有好几个路径反馈如下:
>>> import sys
>>> sys.path
['', '/opt/ros/melodic/lib/python2.7/dist-packages', '/home/xxx/anaconda3/lib/python37.zip', '/home/xxx/anaconda3/lib/python3.7', '/home/xxx/anaconda3/lib/python3.7/lib-dynload', '/home/xxx/anaconda3/lib/python3.7/site-packages']
系统会从上面这个列表中去找包的路径,这也就是为啥我们有些系统包总可以找的到,因为那些python系统包或者anaconda环境下的工具安装包默认写在路径里了,大多都在site-packages
文件夹里
'/home/xxx/anaconda3/lib/python3.7/site-packages'
注意
上面的列表最开头有个 ''
这个很关键,因为它代表的是当前使用的程序包(也就是你写import 运行然后出现找不到包报错的那个程序包)的路径,相当于命令行里的./
这就是为啥当前程序包下的一些文件在解决了上文原因1以后就好找了,其它隔了10w8千里远的包不好找的原因, 因为前程序包下的一些文件在路径./
下啊, 而其它远的不在这个找包路径的列表里啊.
所以一般可以通过两种办法解决
- 在要运行的.py文件开头加这两句
import sys
sys.path.append('调用的包的路径')
- 在运行环境的python解释器的site_pakages文件夹下添加
.pth
文件比如
cd /home/xxx/anaconda3/lib/python3.7/site-packages
sudo echo "要引用的包的文件目录比如:/home/haha" > 自己写名字.pth
这里要注意, 加入.pth
文件时要加入的路径是包的最外层
路径, 接着交给每个目录下的__init__.py
文件就好啦, 一般找不到是因为你放的路径可能还是不够外, 因为有时候喜欢用from xxx import yyy
导入,
我的意思是
注意工程里面用 from xxx import yyy 的语句, 此时需要添加的路径是包含xxx的文件夹的路径, 而非xxx的路径
此时如果不够外,系统还是会看不到xxx
文件
先说一下python内核自带或者pip安装等等的工程包比如sys
, nunpy
会统一安装在一个固定的目录,比如 :/usr/local/lib/python3.6/dist-packages
或者/home/XXX/anaconda3/lib/python3.7/site-packages
这些人家在你安装的时候就已经给你安排妥当了,真出问题了就只能硬着头皮找了
- pip环境包
这种情况多半是没用对环境,可以终端输入下面的命令看看是否安装,以及安装的位置,使用的是哪个环境
which pip
pip show 包名
- 系统的默认环境路径
终端输入命令
python -m site
- conda 的,涉及虚拟环境也一样
一般都在base环境或者虚拟环境的site_pakages 文件夹里,比如
/home/xxx/anaconda3/lib/python3.7/site-packages
- 左上角 -> run -> open Configurations -> launch.json
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
"name": "Python: Current File",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal",
"args": ["-d", "./Dataset",
"-s", "00"
"env": {"PYTHONPATH":"${workspaceRoot}"},
"envFile": "${workspaceFolder}/.env",
- 在工程文件夹(就是你vscode openfolder打开的那个文件夹下) 创建一个
.env
文件,在这个文件里写上你特定要加入的包的路径,这个路径会自动加入工程的系统根目录里,
如.env
文件里写入:
PYTHONPATH=/home/foia/Desktop/xxx
- 注意
.env
文件夹需要放置的位置,不要不小心放到了.vscode
文件夹里哦, 另外也要遵循注意工程里面用 from xxx import yyy 的语句, 此时需要添加的路径是包含xxx的文件夹的路径, 而非xxx的路径
这一条规则哦

- code runner 小tip, shift + ctrl + P 输入setting.json 选择 default setting.json 打开, 找到"code-runner.executorMap", “python”: “python -u”, 改成 “python.pythonPath: 你的虚拟环境解释器运行文件地址”, 可以让code runner 运行conda虚拟环境
https://python3-cookbook.readthedocs.io/zh_CN/latest/c10/p09_add_directories_to_sys_path.html
https://www.cnblogs.com/maggieq8324/p/12099068.html
https://blog.csdn.net/weixin_30625691/article/details/96115379
https://www.bbsmax.com/A/xl56eN8kJr/
https://www.bbsmax.com/A/xl56eN8kJr/
python 中pyc文件介绍
解决:VScode中 import 后出现no module的问题
经过前辈oyljerry等的指点迷津,要在sys.path添加包a的路径,永久添加则在/usr/lib/python2.7/dist-packages添加一个pth文件。如临时添加测试,可以使用列表函数append把该路径放入列表尾部即可。
为什么不是包b的路径呢?因为虽然a和b都是一个包,如添加包b的路径到搜索路径列表,则python搜索时先遇到a把它当作包处理,就不往
作为一个菜鸟级别的我,因为导包问题还纠结了好长时间,在这附上我觉得最浅显易懂转载的一篇博客:https://www.cnblogs.com/feifei-cyj/archive/2017/09/29/7609953.html
之前犯的错误是直接 import 同目录下的文件名,在导包是一直显示No module named XXX。按书本上是没错的,如果哪位同仁知道这个问题,请告知一下,多谢~最...
文章目录一、Pycharm可以执行,而cmd报错?二、解决办法1.将要执行的模块或者.py文件加入环境变量中2.注意2.加入sys.path.addpend()后加入sys.path.append()之后,如下图位置然后再运行,就可以成功!!!
提示:以下是本篇文章正文内容,下面案例可供参考
我将要执行这个test_case.py,要导入不根目录下的目录config下的yamload.yp模块时(这些是自己定义写的函数、模块),在Pycharm是可以正常执行的,但在cmd命令却报错。ModuleNo.
又遇到与pycharm配置有关的问题。pycharm无法import自己安装的第三方库,好神奇啊,这个可是在pycharm下安装的地三方module。那么我的配置问题出在哪里?