我还是Python新手。
我有一个包含多个应用程序和/libs
目录的Django网站。我需要添加几个将使用我的Django模型的cron作业。我已经完成了所有这些,没什么大不了的。
我的导入存在问题。
我想将这些脚本包含在他们通常所属的应用程序中。但是当我从命令行执行脚本时,它无法从/libs
目录加载模块。
为了具体说明dir结构,想象一下这个伪代码:
import ./../libs/mysharedlib.py
换句话说,脚本和sharedlib是:
~/project/myapp/myscript.py
~/project/libs/mysharedlib.py
我知道我可以将~/project
添加到我的PYTHONPATH
但是我必须担心在部署期间执行此操作并且感觉很糟糕。
我应该将我的脚本移出我的应用并将其放入~/project
吗?还有更好的方法吗?
答案 0 :(得分:12)
有一种更好的方法,自定义管理命令可以解决这个问题。 https://docs.djangoproject.com/en/dev/howto/custom-management-commands/
这些允许您编写独立的实用程序脚本。您可以将它们作为cron运行,也可以作为实用程序运行。它们使用与django应用程序中任何其他模块完全相同的路径。
虽然这些解决了导入问题,但您的libs目录是否有__init__.py
文件?你能在视图中导入你的lib目录吗?或者你的导入是不是在你的cron脚本中工作?无论哪种方式,自定义管理命令都可以解决这个问题。