我想通过双击主模块(在eclipse之外)来运行我的工作pydev项目python代码:xxx.py
问题是由于我的导入位于不同的包中:
from src.apackage.amodule import obj
当 xxx.py 被双击时,它抱怨它不知道导入在哪里(即使当我在 pydev 中运行 xxx.py 时它神奇地知道我正在导入什么)。
一个简单的解决方法是删除所有包并将所有模块移动到一个目录中(这显然有效但非常不方便)
我怎样才能在文件系统中运行我的代码而不做这个工作?
我想通过双击主模块(在eclipse之外)来运行我的工作pydev项目python代码:xxx.py
问题是由于我的导入位于不同的包中:
from src.apackage.amodule import obj
当 xxx.py 被双击时,它抱怨它不知道导入在哪里(即使当我在 pydev 中运行 xxx.py 时它神奇地知道我正在导入什么)。
一个简单的解决方法是删除所有包并将所有模块移动到一个目录中(这显然有效但非常不方便)
我怎样才能在文件系统中运行我的代码而不做这个工作?
这个页面很好地回答了我的问题:
http://blog.habnab.it/blog/2013/07/21/python-packages-and-you/
底线始终是从顶层、最高级别的根目录执行您的代码(例如,使用执行程序主脚本的最小主.py 文件)。然后,始终使用绝对导入,并且您永远不会遇到缺少模块的问题,因为您从顶级目录启动程序并且所有导入都基于该“主”路径。
您遇到的问题是大多数语言的自然行为。一个程序只知道它的工作路径(它开始的路径),在环境变量中注册的路径以及至少是相对路径。
因此,您创建的可执行文件的“魔力”是:它收集所需的所有脚本/模块,并将它们复制/组合到可执行文件旁边/中。然后,可执行文件在所有其他脚本也驻留的目录中运行,瞧……
如果您对每次想要在没有 PyDev 的情况下运行项目时创建可执行文件的解决方法不满意,则有两种选择。首先但不是我建议的是将工作路径注册到环境变量中。第二个也是我认为更好的一个:创建指向 python 可执行文件的链接并更改文本字段“目标:”的调用字符串。将路径附加到您要运行的脚本。然后更改文本字段“Start in:”并进入项目目录。完成此操作后,您应该能够通过简单的双击来启动您的项目。
(如果您依赖既不在路径上也不在项目中的外部库,您可以通过 sys 模块搜索临时附加到 pythonpath 的路径。)
我希望我能帮上一点忙。