我在通过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使用:
luigid
它工作正常,但每当我尝试使用以下方式启动它时:
luigid --background
我收到以下错误:
No module named pwd
我的整体设置似乎有问题,任何帮助都会受到赞赏。
答案 0 :(得分:4)
我遇到了同样的问题并解决了它。要安排或执行的模块必须位于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%
对于我来说,addidng当前文件夹对PYTHONPATH有效,并且使用批处理文件很容易执行。 或者,您可以在Windows中永久添加此变量。
答案 1 :(得分:3)
获取examples
存储库中的luigi
目录(git clone ...
,并且您拥有luigi
目录)。在那里你可以找到一些不同的例子,其中包括:
hello_world.py
包含task_namespace = 'examples'
之类的内容(与存储所有这些python文件的存储库中的 python模块 examples
相同):
luigi
外部的luigid
命令(不需要守护进程examples
)来执行: cd luigi && PYTHONPATH=. luigi --module examples.hello_world examples.HelloWorldTask --local-scheduler
top_artists.py
不包含对task_namespace
等内容的任何引用:
examples
:cd luigi/examples && PYTHONPATH='.' luigi --module top_artists AggregateArtists --local-scheduler --date-interval 2012-06
这对我使用 miniconda (类似于anaconda)和 cygwin ,但我认为即使你不使用 cygwin >也可行strong>(可能powershell
或cmd
不允许您使用&&
连接命令,但您始终可以一个接一个地运行这些命令。
我不确定原因/解释,但要解决这个问题,您可以使用hello_world.py
并将其作为cd luigi/examples && PYTHONPATH=. luigi --module hello_world HelloWorldTask --local-scheduler
运行(请注意luigi
命令是调用而不用examples.
作为命令参数的前缀),这将给出以下异常:
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相关的内部结构)。
答案 2 :(得分:0)
自从我自己碰到这个问题。真正帮助我的是坚持使用documentation中给出的内容:
PYTHONPATH='.' luigi --module top_artists AggregateArtists --local-scheduler --date-interval 2012-06
因此,PYTHONPATH定义必须与luigi命令位于同一命令中。这对我有帮助。
答案 3 :(得分:0)
luigi似乎正在更改sys.path
变量。您可以将luigi软件包猴子打补丁以添加sys.path.insert(0,'')