【问题标题】:Error while starting Pyramid project in Pycharm在 Pycharm 中启动 Pyramid 项目时出错
【发布时间】:2015-09-13 20:55:48
【问题描述】:

我有一个金字塔项目,在另一个系统中很好。我已将项目移至使用 anaconda-python 的系统。除此之外,还存在所有其他所需的库和包。金字塔项目启动失败,出现以下错误..

Traceback (most recent call last):
  File "C:\Program Files (x86)\JetBrains\PyCharm 4.5.4\helpers\pycharm\pycharm_load_entry_point.py", line 8, in <module>
    load_entry_point(dist, "console_scripts", name)()
  File "C:\Users\abc\Anaconda\lib\site-packages\pyramid\scripts\pserve.py", line 58, in main
    return command.run()
  File "C:\Users\abc\Anaconda\lib\site-packages\pyramid\scripts\pserve.py", line 257, in run
    vars = self.get_options()
  File "C:\Users\abc\Anaconda\lib\site-packages\pyramid\scripts\pserve.py", line 197, in get_options
    return parse_vars(restvars)
  File "C:\Users\abc\Anaconda\lib\site-packages\pyramid\scripts\common.py", line 15, in parse_vars
    % arg)
ValueError: Variable assignment '\\Pyramid1\\development.ini' invalid (no "=")

Process finished with exit code 1

development.ini 文件:

###
# app configuration
# http://docs.pylonsproject.org/projects/pyramid/en/1.5-branch/narr/environment.html
###

[app:main]
use = egg:Pyramid1

pyramid.reload_templates = true
pyramid.debug_authorization = false
pyramid.debug_notfound = false
pyramid.debug_routematch = false
pyramid.default_locale_name = en
pyramid.includes =
    pyramid_debugtoolbar
    pyramid_tm
    pyramid_chameleon
# mysql+mysqldb://<user>:<password>@<host>[:<port>]/<dbname>
sqlalchemy.url = mysql+mysqldb://root:@127.0.0.1:3306/db1
sqlalchemy2.url = mysql+mysqldb://root:@127.0.0.1:3306/db2
# By default, the toolbar only appears for clients from IP addresses
# '127.0.0.1' and '::1'.
# debugtoolbar.hosts = 127.0.0.1 ::1

###
# wsgi server configuration
###

[server:main]
use = egg:waitress#main
host = 0.0.0.0
port = 6543

###
# logging configuration
# http://docs.pylonsproject.org/projects/pyramid/en/1.5-branch/narr/logging.html
###

[loggers]
keys = root, sqlalchemy

[handlers]
keys = console

[formatters]
keys = generic

[logger_root]
level = INFO
handlers = console

[logger_pyramid1]
level = DEBUG
handlers =
qualname = pyramid1

[logger_sqlalchemy]
level = INFO
handlers =
qualname = sqlalchemy.engine
# "level = INFO" logs SQL queries.
# "level = DEBUG" logs SQL queries and results.
# "level = WARN" logs neither.  (Recommended for production systems.)

[handler_console]
class = StreamHandler
args = (sys.stderr,)
level = NOTSET
formatter = generic

[formatter_generic]
format = %(asctime)s %(levelname)-5.5s [%(name)s][%(threadName)s] %(message)s

我在 anaconda 中使用 python 27。和pycharm 4.5.4

【问题讨论】:

    标签: python pyramid


    【解决方案1】:

    您在一个部分中定义了两次 pyramid.includes:

    试试:

    [app:main]
    use = egg:Pyramid1
    
    pyramid.reload_templates = true
    pyramid.debug_authorization = false
    pyramid.debug_notfound = false
    pyramid.debug_routematch = false
    pyramid.default_locale_name = en
    pyramid.includes = pyramid_debugtoolbar
        pyramid_tm
        pyramid_chameleon
    ...
    

    【讨论】:

    • 你能发布你更新的 development.ini 文件吗?我会在本地测试它
    • 我已经编辑了问题中的 development.ini 并进行了更改
    • 在我这边解析很好,错误中的行号是否改变了?
    • 很奇怪,这绝对解决了我这边的错误。您是否 100% 确定更新了正确的文件?
    • 我也稍微更改了我的 development.ini 示例文件,将 pyramid_debugtoolbar 放在同一行。请也尝试一下
    【解决方案2】:

    诊断此类问题的方法是打开引发错误的源文件 (C:\Users\abc\Anaconda\lib\site-packages\pyramid\scripts\common.py) 并添加一些日志记录。根据Pyramid git repo,有问题的功能是parse_vars。这样做可以提供即时洞察:

    def parse_vars(args):
        """
        Given variables like ``['a=b', 'c=d']`` turns it into ``{'a':
        'b', 'c': 'd'}``
        """
        print("parse_vars called with:", args)
        result = {}
        for arg in args:
            print("parsing:", arg)
            if '=' not in arg:
                print("Not happy with %s, going to raise an exception" % arg)
                raise ValueError(
                    'Variable assignment %r invalid (no "=")'
                    % arg)
            name, value = arg.split('=', 1)
            result[name] = value
        return result
    

    脚本语言的奇妙之处,您甚至可以使用 Python 的标准库函数 :) 完成后不要忘记将其改回来。

    现在,查看您的回溯,很明显该函数得到了错误的输入 - 而不是'a=b' 格式的字符串,而是'\\Pyramid1\\development.ini'。如果您查看pserve.py,您会发现它与解析传递给脚本的命令行参数更相关——您的应用甚至还没有加载您的 .ini 文件。

    【讨论】:

      猜你喜欢
      • 2021-01-01
      • 2013-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-06
      • 2018-05-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多