命令行运行python模块时提示包找不到的问题
庄稼人不是专职python开发的道友。尽管与python相识已多年,可惜相识不相知,仅仅是偶尔借助pydev写一些简单的小工具。
多年来。一直困惑于这样一个问题:相同的project。相同的代码,使用pydev能够执行随意一个python脚本,而使用命令行执行却不行?命令行下(或者双击执行)总是提示“ImportError: No module named xxx”?pydev到底做了什么魔术呢?
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3J5bGVhcm5lcg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
长话短说,以上面project为例,假设是在命令行中直接执行 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在执行时会把当前project的全部文件夹路径都作为包的搜索路径,而命令行默认仅仅是搜索当前路径。也于是乎。xx_package也就不可能会被找到。由于它是在上一级文件夹中。
明确了这一点,剩下的就非常easy了,要在命令行中运行c.py, 或者改动sys.path, 将上一级文件夹也包括进去。只是个人不喜欢。
比較简单的方式还是统一脚本的运行路径是project的根文件夹,即每次都在project根文件夹下新建一个脚本,比方叫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意义上的包。如上面实例project中的xx_folder,
那么能够直接在命令行中执行c.py. 由于导入b.py时不须要指出查找xx_folder, 详细能够參看久远前的一篇文章
命令行运行python模块时提示包找不到的问题的更多相关文章
- 命令行执行python模块时提示ImportError: No module named xxx
在pycharm中运行python文件没有问题,切换到cmd中是提示:ImportError: No module named xxx 原因: pycharm在运行时会把当前工程的所有文件夹路径都作为 ...
- 命令行运行Python脚本时传入参数的三种方式
原文链接:命令行运行Python脚本时传入参数的三种方式(原文的几处错误在此已纠正) 如果在运行python脚本时需要传入一些参数,例如gpus与batch_size,可以使用如下三种方式. pyth ...
- 命令行执行python文件时提示ImportError: No module named 'xxx'
背景: 最近在写接口自动化测试框架的时候发现,框架使用pycharm ide的时候可以正常跑测试用例,但是在dos窗口输入命令执行测试的时候,import项目内部的包时报错“ModuleNotFoun ...
- 设置PATH 环境变量、pyw格式、命令行运行python程序与多重剪贴板
pyw格式简介: 与py类似,我认为他们俩卫衣的不同就是前者运行时候不显示终端窗口,后者显示 命令行运行python程序: 在我学习python的过程中我通常使用IDLE来运行程序,这一步骤太过繁琐( ...
- 命令行运行Java程序时出现错误
在命令行运行Java程序时出现下面错误 Error: Could not create the Java Virtual Machine. Error: A fatal exception has o ...
- shell脚本命令 运行python文件&python命令行运行python代码
单独的python文件运行的时候 报错: 在shell脚本中,运行shell脚本命令:在Python命令行中,运行Python代码.然而,“python hello.py”是一个脚本命令,不是pyth ...
- [经验总结] 在 windows 命令窗口中运行 python 脚本时提示 ModuleNotFoundError: No module named 'xxx'
先给出的代码和目录结构 获取CPU代码如下: # -*- coding:utf-8 -*- ''' Created on Sep 10, 2018 @author: ''' import sys im ...
- 解决命令行运行python文件,出现No module named *** 报错问题
有时候在一个项目中运行的时候,可能是之前已经mark成sources root 你自己忘记了, 于是就在命令行也执行python文件,然后就出现 No module named *** 等 相关你认为 ...
- 在命令行运行 python 抛出 ModuleNotFoundError 的解决方法
所要运行的 py 文件在子目录中,并且该文件引用了另一个子目录中的 py 模块.类似这样: 原因 在运行环境下, a.py 找不到 b.py 所以抛出 ModuleNotFoundError. 解决 ...
随机推荐
- Highcharts图表的注解功能
Highcharts图表的注解功能 在图表中,往往须要对图表总体或者部分元素进行对应注解.帮助浏览者阅读图表.尽管标签组labels能够实现类似的功能.可是其功能相对简单.要实现复杂的注解功能,用户能 ...
- Swift具体解释之三----------函数(你想知道的都在这里)
函数(你想知道的都在这里) 注:本文为作者自己总结.过于基础的就不再赘述 ,都是亲自測试的结果.如有错误或者遗漏的地方.欢迎指正.一起学习. 1. 函数的简单定义和调用 简单的无參函数就不再赘述 , ...
- 阿姆达尔定律(Amdahl's law)
首先给出阿姆达尔定律的数学公式描述: S(N)=1(1−p)+pN p:程序中可并行部分的程序在单核上执行时间的占比: N:处理器的数目(总的核心数) S(N):程序在 N 个处理器(总核心数)相对在 ...
- 至顶网推荐-Rpm另类用法加固Linux安全
http://www.zdnet.com.cn/ 650) this.width=650;" onclick='window.open("http://blog.51cto.com ...
- 转一篇对EJB理解的文章
1. 我们不禁要问,什么是"服务集群"?什么是"企业级开发"? 既然说了EJB 是为了"服务集群"和"企业级开发",那么 ...
- 一个小的考试系统 android 思路
一个小的考试系统 android 思路 假如有 100 组,每组有4个单选钮,设置超时检测确认后去测结果估分视图去切换,如果还有,就再显示下一组 所有结束就给个总结显示 有超时结束过程加上 提示正确选 ...
- 在 Swift 專案中使用 Javascript:編寫一個將 Markdown 轉為 HTML 的編輯器
原文:Using JavaScript in Swift Projects: Building a Markdown to HTML Editor 作者:GABRIEL THEODOROPOULOS ...
- 疯狂html5讲义(二):HTML5简的经常使用元素与属性(二):html5新增的通用属性
1.contentEditable属性 true时可直接编辑html元素里面的内容.且具有"可继承"的特点. 编辑后不要刷新页面.否则编辑的内容会丢失,能够通过该元素的innerH ...
- 芯片TPS76030、TPS76032、TPS76033、TPS76038、TPS76050 电源芯片
下图是从网上摘出来的图片:TPS76033 它的作用就是改变电压: 输入电压:3.5V到16V 通过芯片的处理后 输出电压:3.3V 要学会看图,从中提取有用的信息 再看一个数据手 ...
- Scala入门到精通——第十九节 隐式转换与隐式參数(二)
作者:摇摆少年梦 配套视频地址:http://www.xuetuwuyou.com/course/12 本节主要内容 隐式參数中的隐式转换 函数中隐式參数使用概要 隐式转换问题梳理 1. 隐式參数中的 ...