【问题标题】:ImportError: No module named config on Travis-CI buildImportError:在 Travis-CI 构建中没有名为 config 的模块
【发布时间】:2014-11-15 03:12:18
【问题描述】:

Travis builds 出现导入错误,该错误与flask 的配置有关:

from flask import Flask

app = Flask(__name__)
app.config.from_object('config')

在本地机器上,烧瓶应用程序运行正常。但在 travis 上,这里是错误跟踪

$ nosetests --with-coverage --cover-package=core
E.........................
======================================================================
ERROR: Failure: ImportStringError (import_string() failed for 'config'. Possible reasons are:
- missing __init__.py in a package;
- package or module path not included in sys.path;
- duplicated package or module name taking precedence in sys.path;
- missing module, class, function or variable;
Debugged import:
- 'config' not found.
Original exception:
ImportError: No module named config)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/travis/virtualenv/python2.7_with_system_site_packages/local/lib/python2.7/site-packages/nose/loader.py", line 414, in loadTestsFromName
addr.filename, addr.module)
  File "/home/travis/virtualenv/python2.7_with_system_site_packages/local/lib/python2.7/site-packages/nose/importer.py", line 47, in importFromPath
return self.importFromDir(dir_path, fqname)
  File "/home/travis/virtualenv/python2.7_with_system_site_packages/local/lib/python2.7/site-packages/nose/importer.py", line 94, in importFromDir
mod = load_module(part_fqname, fh, filename, desc)
  File "/home/travis/build/dzlab/sentimentpy/webapp/app/__init__.py", line 6, in <module>
app.config.from_object('config')
  File "/home/travis/virtualenv/python2.7_with_system_site_packages/local/lib/python2.7/site-packages/flask/config.py", line 162, in from_object
obj = import_string(obj)
  File "/home/travis/virtualenv/python2.7_with_system_site_packages/local/lib/python2.7/site-packages/werkzeug/utils.py", line 426, in import_string
sys.exc_info()[2])
  File "/home/travis/virtualenv/python2.7_with_system_site_packages/local/lib/python2.7/site-packages/werkzeug/utils.py", line 408, in import_string
return __import__(import_name)
ImportStringError: import_string() failed for 'config'. Possible reasons are:
- missing __init__.py in a package;
- package or module path not included in sys.path;
- duplicated package or module name taking precedence in sys.path;
- missing module, class, function or variable;

我的配置有什么问题?

【问题讨论】:

    标签: python configuration flask nose travis-ci


    【解决方案1】:

    import_string 只接受绝对模块导入。由于config不是顶级模块,而是webapp的一部分,所以需要指定webapp.config。见http://flask.pocoo.org/docs/0.10/config/#configuring-from-files

    app = Flask(__name__)
    app.config.from_object('yourapplication.default_settings')
    app.config.from_envvar('YOURAPPLICATION_SETTINGS')
    

    【讨论】:

      【解决方案2】:

      我最近遇到了这个问题,直到我在阅读 Markus 的回答后第 2 天顿悟后才弄清楚。

      以防万一有人正在寻找从 config.py 加载配置的解决方案,并且烧瓶应用正在使用包结构,然后确保提供完整的类路径app.config.from_object() 中的配置类文件。

      例如,我在我的烧瓶项目myproj 中有一个配置myproj/app/config.py,而具有该配置的类文件是DevelopmentConfig。您需要按如下方式提供:

      app.config.from_object('app.config.DevelopmentConfig')
      

      另一个例子是,如果您将同一个文件放在myproj/instance/config.py 下,那么您将其称为:

      app.config.from_object('instance.config.DevelopmentConfig')
      

      在您的应用开发过程中,更改设置的最简单方法是将环境变量放入myapp/.env 文件中,如下所示:

      FLASK_APP=app
      APP_SETTINGS="app.config.DevelopmentConfig"
      

      并在您的app.config.from_object() 调用中使用该变量:

      app.config.from_object(os.environ['APP_SETTINGS'])
      

      但请记住,要使 .env 生效,您需要使用 flask run 启动应用,而不是直接运行应用。

      【讨论】:

        猜你喜欢
        • 2015-08-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-15
        • 2014-08-10
        • 2018-10-16
        • 1970-01-01
        • 2016-05-24
        相关资源
        最近更新 更多