命令行执行python模块时提示包找不到的问题

庄稼人不是专职python开发的道友,虽然与python相识已多年,可惜相识不相知,只是偶尔借助pydev写一些简单的小工具。

多年来,一直困惑于这样一个问题:同样的工程,同样的代码,使用pydev可以运行任意一个python脚本,而使用命令行运行却不行?命令行下(或者双击执行)总是提示“ImportError: No module named xxx”?pydev究竟做了什么魔术呢?



长话短说,以上面工程为例,如果是在命令行中直接执行 python c.py , 都会提示"ImportError: No module named xx_package.b".但是pydev中可以直接运行。

比较两者的包查找路径,也就是sys.path,

pythondev:

['F:\\Archive\\workspace-java\\PyExperiment\\xx_package', 'F:\\Archive\\workspace-java\\PyExperiment', 'F:\\Archive\\workspace-java\\PyExperiment\\xx_folder' ,。。。]

命令行:

['F:\\Archive\\workspace-java\\PyExperiment\\xx_package', 。。。]


什么都不用说了,明眼人一看就明白了,pydev在运行时会把当前工程的所有文件夹路径都作为包的搜索路径,而命令行默认只是搜索当前路径。也于是乎,xx_package也就不可能会被找到,因为它是在上一级目录中。


明白了这一点,剩下的就很简单了,要在命令行中执行c.py, 或者修改sys.path, 将上一级目录也包含进去,不过个人不喜欢。

比较简单的方式还是统一脚本的执行路径是工程的根目录,即每次都在工程根目录下新建一个脚本,比如叫main.py。它什么也不做,只是将c.py导入进来。仅此而已。

main.py

import xx_package.c

试试,这样就可以正常在命令行中运行了,当然双击脚本也是也一样的



另外,补充两点,

1. 与shell等脚本不同, python的搜索路径,是第一个执行的脚本所在的路径,而不是当前命令行窗口中提示的路径

 PyExperiment \ xx_package >python c.py

  PyExperiment > pthon xx_package/c.py

  对python来说,搜索路径都是c.py所在的路径PyExperiment \ xx_package

2. 如果某个文件夹是纯粹的文件夹,不是python意义上的包。如上面实例工程中的xx_folder, 

那么可以直接在命令行中运行c.py. 因为导入b.py时不需要指出查找xx_folder, 具体可以参看久远前的一篇文章

python最简单直接的自定义模块导入方法



  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
命令行执行 Python 脚本出现找不到模块问题,可能是因为 Python 解释器无法找到该模块的路径。你可以尝试以下解决方法: 1. 确认模块是否已经安装:在命令行中输入 `pip list`,查看已安装的 Python 模块列表,确认你需要的模块是否已经安装。 2. 如果模块未安装,可以使用 `pip install 模块名` 命令来安装。例如,如果你需要安装 `requests` 模块,可以执行命令 `pip install requests`。 3. 如果模块已经安装但仍然提示不到模块,可能是模块的路径未正确设置。你可以尝试以下方法来解决: - 使用绝对路径导入模块:在脚本使用绝对路径导入模块,例如 `import sys; sys.path.append('模块路径')`,将模块路径添加到 Python 解释器的搜索路径中。 - 设置 PYTHONPATH 环境变量:在命令行执行 `set PYTHONPATH=模块路径`,将模块路径添加到 PYTHONPATH 环境变量中。 - 使用虚拟环境:如果你在虚拟环境中工作,确保在正确的虚拟环境中执行脚本使用虚拟环境可以隔离不同项目的依赖关系。 - 检查系统中是否存在多个 Python 版本:有会存在多个 Python 版本共存的情况,确保你使用的是正确的 Python 解释器来执行脚本。 - 检查脚本中的模块导入语句:确保在脚本使用正确的模块导入语句,例如 `import 模块名`。 如果以上方法仍然无法解决问题,请提供具体的错误提示信息和你遇到问题的代码,以便我们更好地帮助你解决。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值