Python 2.7 从cmd运行Luigi任务-“;没有名为“任务”的模块;
我在通过Windows cmd运行Luigi任务时遇到问题。事实如下:Python 2.7 从cmd运行Luigi任务-“;没有名为“任务”的模块;,python-2.7,anaconda,luigi,Python 2.7,Anaconda,Luigi,我在通过Windows cmd运行Luigi任务时遇到问题。事实如下: 运行安装在C:\ProgramData\Anaconda2(Python 2.7)中的Anaconda Anaconda已将其路径添加到PATH变量,但没有PYTHONPATH变量 我试图运行的任务位于C:\....\tasks.py 尝试按如下方式运行它: C:\。。。。luigi——模块任务MyTask——dt 20170316 ImportError:没有名为tasks的模块 我尝试创建一个PYTHONPATH变
- 运行安装在C:\ProgramData\Anaconda2(Python 2.7)中的Anaconda
- Anaconda已将其路径添加到PATH变量,但没有PYTHONPATH变量
- 我试图运行的任务位于
C:\....\tasks.py
- 尝试按如下方式运行它:
C:\。。。。luigi——模块任务MyTask——dt 20170316
ImportError:没有名为tasks的模块
PYTHONPATH
变量,并将确切路径添加到包含我的tasks.py
文件的目录中,但没有成功。我遇到的另一个问题可能与我使用以下命令通过cmd启动luigi调度程序有关:
luigid
它工作正常,但每当我尝试开始使用:
luigid --background
我得到以下错误:
No module named pwd
总体而言,我的设置似乎有问题,请提供帮助。以
luigi
存储库中的examples
目录为例(git clone…
,您有luigi
目录)。在这里,您可以找到几个不同的示例,其中包括:
包含类似于hello\u world.py
(这与保存所有这些python文件的存储库中的python模块task\u namespace='examples'
相同):examples
- 这可以使用python模块外部的
命令执行(不需要守护进程luigi
),例如:luigid
cd luigi&&PYTHONPATH=。luigi--模块示例.hello_world examples.HelloWorldTask--本地调度程序
- 这可以使用python模块外部的
不包含对top\u artists.py
之类内容的任何引用:task\u namespace
- 这可以从python模块中运行
:示例
cd luigi/examples&&PYTHONPATH='.'luigi--模块顶级艺术家聚合列表--本地调度程序--日期间隔2012-06
- 这可以从python模块中运行
powershell
或cmd
不允许您使用&
连接命令,但您始终可以一个接一个地运行这些命令)
我不确定原因/解释,但要解决一点这种行为,您可以使用hello_world.py
并将其作为cd luigi/examples&&PYTHONPATH=运行。luigi--模块hello\u world HelloWorldTask--本地计划程序
(请注意,luigi
命令在调用时没有示例。
作为命令参数的前缀),这将产生以下异常:
raise TaskClassNotFoundException(cls._missing_task_msg(name))
luigi.task_register.TaskClassNotFoundException: No task HelloWorldTask. Candidates are: Config,ExternalTask,RangeBase,RangeByMinutes,RangeByMinutesBase,RangeDaily,RangeDailyBase,RangeHourly,RangeHourlyBase,Task,TestNotificationsTask,WrapperTask,batch_email,core,email,examples.HelloWorldTask,execution_summary,retcode,scheduler,sendgrid,smtp,worker
为了给守护进程的另一个问题提供一些提示,我在cygwin上启动它,命令如下:
luigid&
。该符号和后缀返回命令行提示。要检查哪个PID与守护进程关联,我仍然在cygwin上使用相同的命令行提示符,并运行ps aux | grep luigid
。这种方法可能只适用于cygwin(因为一些与bash相关的内部结构)。我也遇到过同样的问题并解决了它。要计划或执行的模块必须位于sys.path中列出的任何文件夹中
在WINDOWS TERMINAL/CMD/中实现这一点的方法之一是导航到您拥有python模块的文件夹并执行以下命令:
set PYTHONPATH=%cd%;%PYTHONPATH%
该命令将把当前的临时目录添加到现有的PYTHONPATH中。
若系统中并没有PYTHONPATH变量,只需跳过分号后的部分即可。在同一终端窗口中发出luigi命令
luigi --module tasks MyTask --local-scheduler
如果您仍然遇到问题,请使用以下命令将PYTHONPATH添加到PATH变量:
set PATH=%PYTHONPATH%;%PATH%
对我来说,将当前文件夹添加到PYTHONPATH works中,使用批处理文件可以轻松执行。
或者,您可以在Windows中永久添加此变量 因为我自己刚刚遇到了这个问题。对我有帮助的是严格遵守以下内容:
PYTHONPATH='.'luigi--模块顶级艺术家聚合专家--本地调度程序--日期间隔2012-06
因此,PYTHONPATH定义必须与luigi命令位于同一个命令中。这对我很有帮助。luigi似乎正在改变
sys.path
变量。您可以在某处对luigi包进行monkey补丁,以添加sys.path.insert(0')