You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scrapyd部署时无法在Scrapy的settings.py中读取环境变量

解决Scrapyd部署后settings.py无法读取环境变量的问题

错误根源

你遇到的OSError: Starting path not found是因为:

  • load_dotenv()默认会从当前目录向上查找.env文件,但Scrapyd部署时会把项目打包成egg包,上传到服务器后临时解压,你的.env文件没有被打包进egg,导致找不到文件;
  • 临时解压的目录结构也会让find_dotenv的路径遍历逻辑失效。

下面是三种可行的解决方法:

方法一:直接在Scrapyd服务器设置系统环境变量

这是最简洁的方案,不需要依赖.env文件:

  1. 修改settings.py,移除dotenv相关代码:
# settings.py
import os

SENTRY_DSN = os.getenv("SENTRY_DSN")
MONGO_URI = os.getenv("MONGO_URI")
  1. 在Scrapyd服务器配置环境变量:
    • 如果用systemd管理Scrapyd服务,编辑Scrapyd的service文件(比如/etc/systemd/system/scrapyd.service),在[Service]块中添加:
      Environment="SENTRY_DSN=你的Sentry地址"
      Environment="MONGO_URI=你的MongoDB连接字符串"
      
      然后执行sudo systemctl daemon-reload && sudo systemctl restart scrapyd重启服务。
    • 如果直接启动Scrapyd,在启动前先导出环境变量:
      export SENTRY_DSN="你的Sentry地址"
      export MONGO_URI="你的MongoDB连接字符串"
      scrapyd
      

方法二:将.env文件打包进egg并指定加载路径

如果坚持使用.env文件,需要确保它被打包到egg中,并指定绝对路径加载:

  1. 修改settings.py,指定.env的绝对路径:
# settings.py
import os
from dotenv import load_dotenv
from pathlib import Path

# 获取settings.py所在目录的绝对路径
PROJECT_DIR = Path(__file__).parent.resolve()
# 加载当前目录下的.env文件
load_dotenv(PROJECT_DIR / ".env")

SENTRY_DSN = os.getenv("SENTRY_DSN")
MONGO_URI = os.getenv("MONGO_URI")
  1. 确保.env被打包进egg:
    • 编辑scrapy.cfg,在你的deploy配置块中添加include = .env:
      [deploy:你的部署目标名]
      url = http://你的Scrapyd服务器地址:6800/
      project = jobFlow
      include = .env
      
    • 或者修改项目根目录的setup.py,在package_data中添加.env:
      setup(
          # ... 其他配置
          package_data={
              'jobFlow': ['.env'],
          },
      )
      
  2. 重新部署项目:
scrapyd-deploy --include-dependencies

方法三:通过Scrapyd配置传递参数

利用Scrapyd的项目配置功能,直接在服务器端设置项目级别的参数:

  1. 修改Scrapyd的配置文件(比如/etc/scrapyd/scrapyd.conf),添加你的项目配置:
[jobFlow]
MONGO_URI = 你的MongoDB连接字符串
SENTRY_DSN = 你的Sentry地址
  1. 爬虫代码无需修改,依然用self.settings.get("MONGO_URI")读取参数即可。
    你也可以在启动爬虫时临时传递参数:
    curl http://你的Scrapyd服务器:6800/schedule.json \
      -d project=jobFlow \
      -d spider=你的爬虫名 \
      -d setting=MONGO_URI=mongodb://xxx \
      -d setting=SENTRY_DSN=https://xxx
    

内容的提问来源于stack exchange,提问作者Hesam Norin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 11:54:54