zoukankan      html  css  js  c++  java
  • 命令行运行python模块时提示包找不到的问题

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

    多年来。一直困惑于这样一个问题:相同的project。相同的代码,使用pydev能够执行随意一个python脚本,而使用命令行执行却不行?命令行下(或者双击执行)总是提示“ImportError: No module named xxx”?pydev到底做了什么魔术呢?



    长话短说,以上面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最简单直接的自己定义模块导入方法



  • 相关阅读:
    操作系统之进程篇(3)
    指针和数组及内存管理
    进程篇(3: 基本进程控制:进程的退出)--请参照本博客“操作系统”专栏
    Java面向对象程序设计--泛型编程
    进程篇(1: 进程运行环境)--请参照本博客“操作系统”专栏
    操作系统之进程篇(1)
    分类器性能指标之ROC曲线、AUC值
    如何理解似然函数?
    sigmoid函数简介
    Hive分析窗口函数
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/7040314.html
Copyright © 2011-2022 走看看