Python 2.7 从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变

我在通过Windows cmd运行Luigi任务时遇到问题。事实如下:

  • 运行安装在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
    包含类似于
    task\u namespace='examples'
    (这与保存所有这些python文件的存储库中的python模块
    examples
    相同):
    • 这可以使用python模块外部的
      luigi
      命令执行(不需要守护进程
      luigid
      ),例如:
      cd luigi&&PYTHONPATH=。luigi--模块示例.hello_world examples.HelloWorldTask--本地调度程序
  • top\u artists.py
    不包含对
    task\u namespace
    之类内容的任何引用:
    • 这可以从python模块中运行
      示例
      cd luigi/examples&&PYTHONPATH='.'luigi--模块顶级艺术家聚合列表--本地调度程序--日期间隔2012-06
这对我使用miniconda(类似于anaconda)和cygwin有效,但我认为即使您不使用cygwin(可能
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')