在Eclipse之外运行python脚本时出现问题

时间:2014-05-22 11:44:49

标签: python eclipse pydev

当我在Eclipse中运行它们时,我的所有python脚本都运行正常,但是当我将它们拖到python.exe时,它们永远不会工作,cmd会立即打开和关闭。如果我尝试使用cmd中的命令执行此操作,那么它不会关闭,我会收到如下错误:

ImportErrror:没有名为某些名称的模块

等。 我该如何解决这个问题?

4 个答案:

答案 0 :(得分:2)

你的路径错了。在eclipse中右键单击项目属性> PyDev - PYTHONPATH或项目参考。源文件夹显示eclipse自动处理的所有路径。您尝试导入的模块可能位于父目录中。

Project
    src/
        my_module.py

    import_module.py

你可能想制作一个python包/库。

Project

    bin/
        my_module.py

    lib_name/
        __init__.py
        import_module.py
        other_module.py

在这个例子中,my_module.py不知道import_module.py在哪里。它必须知道图书馆在哪里。我相信如果它们在库中,则other_module.py以及my_module.py需要来自lib_name import import_module。

my_module.py

# Add the parent directory to the path
CURRDIR = os.path.dirname(inspect.getfile(inspect.currentframe()))
PARENTDIR = os.path.dirname(CURRDIR)
sys.path.append(PARENTDIR)

from lib_name import import_module

import_module.do_something()

ADVANCED: 我喜欢做的事情是添加一个使用setuptools的setup.py文件。此文件处理分发项目库。如果您正在处理几个相关项目,这很方便。您可以使用pip或setup.py命令行参数在site-packages python文件夹中创建指向库的链接(所有已安装的python库的位置)。

终端

pip install -e existing/folder/that/has/setup.py

这会将easy_install.pth文件中的链接添加到包含您的库的目录中。它还在站点包中添加了一些egg-link文件。然后,您不必担心只使用lib_name import import_module来访问该库。

答案 1 :(得分:0)

大多数程序员需要关心的导入过程的部分通常是首先定位要导入的文件(“找到它”部分)。因为您可能需要告诉Python在哪里查找要导入的文件,您需要知道如何利用其搜索路径来扩展它。

模块搜索路径顺序

  1. 程序的主目录
  2. PYTHONPATH目录(如果设置)
  3. 标准库目录
  4. 任何.pth文件的内容(如果存在)
  5. 第三方扩展程序的网站包主页
  6. 要编辑PYTHONPATH,请检查here

答案 2 :(得分:0)

尝试运行您的项目:

$ PYTHONPATH=$(path_to_your_project) python $(path_to_your_project)/main.py

答案 3 :(得分:0)

在使用设计模式(来自HF设计模式)时,我在PyDev / Eclipse中开发了以下应用程序。

CommandPy
   |
    --  src
     |
      --    commandPy
           |--  __init__.py
           |--  command.py
           |--  garageDoor.py
           |--  garageDoorOpenCommand.py
           |--  light.py
           |--  lightOffCommand.py
           |--  lightOnCommand.py
           |--  remoteControlTest.py
           |--  simpleRemoteControl.py

(主要应用模块为remoteControlTest.py)。

尽管这在Eclipse中有效,但我无法在命令行上使用它-一直在获取ImportErrror: No module named commandPy。在花了很多时间研究__init__.py中的内容以尝试使其正常工作之后,我在另一本书中看到了一些给我答案的东西。只需将主应用程序模块移出package文件夹,如下所示:

CommandPy
   |
    --  src
     |--    remoteControlTest.py
     |
     |--    commandPy
           |--  __init__.py
           |--  .... etc

(在Ecllipse中,通过将文件拖放到src文件夹中并接受“重构”对话框来执行此操作)。 打开命令提示符或终端并进入src文件夹后,现在可以运行python remoteControlTest.py