configparser не работает в Python 3.4, NoSectionError, но прекрасно работает в PyCharm



Я работал над скриптом Python 3.4 в PyCharm 4.5. (РЕПО: https://github.com/Djidiouf/bbot )
В нем я использовал import configparser без каких-либо проблем для извлечения некоторых значений в конфигурации.cfg:



config = configparser.RawConfigParser()
config.read('config.cfg')
server = config.get('bot_configuration', 'server')
channel = config.get('bot_configuration', 'channel')
botnick = config.get('bot_configuration', 'botnick')
port = config.getint('bot_configuration', 'port')


Теперь я хочу развернуть его на сервере Debian 8.1. На этом сервере у меня установлены версии Python 2.7 и Python 3.4.



Но когда я запустил скрипт на машине, у меня возникла следующая проблема:

djidiouf@linuxserver:/home/djidiouf# /usr/bin/python3.4 /home/djidiouf/bbot/bbot.py
Traceback (most recent call last):
File "/usr/lib/python3.4/configparser.py", line 1116, in _unify_values
sectiondict = self._sections[section]
KeyError: 'bot_configuration'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/home/djidiouf/bbot/bbot.py", line 25, in <module>
import modules.steam # Contains specific Steam-Valve related functions
File "/home/djidiouf/bbot/modules/steam.py", line 13, in <module>
import modules.connection
File "/home/djidiouf/bbot/modules/connection.py", line 37, in <module>
server = config.get('bot_configuration', 'server')
File "/usr/lib/python3.4/configparser.py", line 754, in get
d = self._unify_values(section, vars)
File "/usr/lib/python3.4/configparser.py", line 1119, in _unify_values
raise NoSectionError(section)
configparser.NoSectionError: No section: 'bot_configuration'


Я провел много исследований в Интернете по этому поводу, но я не сделал этого. найди что-нибудь ценное. Некоторые люди упоминали о коррумпированной конфигурации.cfg файл, но мой-это файл LF EOL с UTF8 без BOM по мере необходимости. Я также воссоздал его снова с vi на машине.



Я также пытался установить configparser с pip (даже если, если я хорошо понимаю, он теперь встроен в Python 3): pip3 install configparser но когда я это делаю, у меня появляется следующая ошибка:



djidiouf@linuxserver:/home/djidiouf# sudo pip3 install -v configparser
[sudo] password for djidiouf:
Downloading/unpacking configparser
Ignoring link https://pypi.python.org/packages/source/c/configparser/configparser-3.5.0b1.tar.gz#md5=d60ca2c714acb4adaf5818c6a1ffd78b (from https://pypi.python.org/simple/configparser/), version 3.5.0b1 is a pre-release (use --pre to allow).
Ignoring link https://pypi.python.org/packages/source/c/configparser/configparser-3.5.0b2.tar.gz#md5=ad2a71db8bd9a017ed4735eac7acfa07 (from https://pypi.python.org/simple/configparser/), version 3.5.0b2 is a pre-release (use --pre to allow).
Using version 3.3.0r2 (newest of versions: 3.3.0r2, 3.3.0r1, 3.2.0r3, 3.2.0r2, 3.2.0r1)
Downloading configparser-3.3.0r2.tar.gz
Downloading from URL https://pypi.python.org/packages/source/c/configparser/configparser-3.3.0r2.tar.gz#md5=dda0e6a43e9d8767b36d10f1e6770f09 (from https://pypi.python.org/simple/configparser/)
Running setup.py (path:/tmp/pip-build-v7av3db7/configparser/setup.py) egg_info for package configparser
Traceback (most recent call last):
File "<string>", line 3, in <module>
File "/usr/lib/python3/dist-packages/setuptools/__init__.py", line 5, in <module>
import distutils.core
File "/usr/lib/python3.4/distutils/core.py", line 18, in <module>
from distutils.config import PyPIRCCommand
File "/usr/lib/python3.4/distutils/config.py", line 7, in <module>
from configparser import ConfigParser
File "/tmp/pip-build-v7av3db7/configparser/configparser.py", line 397
_KEYCRE = re.compile(ur"%(([^)]+))s")
^
SyntaxError: invalid syntax
Complete output from command python setup.py egg_info:
Traceback (most recent call last):

File "<string>", line 3, in <module>

File "/usr/lib/python3/dist-packages/setuptools/__init__.py", line 5, in <module>

import distutils.core

File "/usr/lib/python3.4/distutils/core.py", line 18, in <module>

from distutils.config import PyPIRCCommand

File "/usr/lib/python3.4/distutils/config.py", line 7, in <module>

from configparser import ConfigParser

File "/tmp/pip-build-v7av3db7/configparser/configparser.py", line 397

_KEYCRE = re.compile(ur"%(([^)]+))s")

^

SyntaxError: invalid syntax

----------------------------------------
Cleaning up...
Command python setup.py egg_info failed with error code 1 in /tmp/pip-build-v7av3db7/configparser
Exception information:
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/pip/basecommand.py", line 122, in main
status = self.run(options, args)
File "/usr/lib/python3/dist-packages/pip/commands/install.py", line 290, in run
requirement_set.prepare_files(finder, force_root_egg_info=self.bundle, bundle=self.bundle)
File "/usr/lib/python3/dist-packages/pip/req.py", line 1230, in prepare_files
req_to_install.run_egg_info()
File "/usr/lib/python3/dist-packages/pip/req.py", line 326, in run_egg_info
command_desc='python setup.py egg_info')
File "/usr/lib/python3/dist-packages/pip/util.py", line 716, in call_subprocess
% (command_desc, proc.returncode, cwd))
pip.exceptions.InstallationError: Command python setup.py egg_info failed with error code 1 in /tmp/pip-build-v7av3db7/configparser

Storing debug log for failure in /root/.pip/pip.log


Вот пример конфигурации, я просто изменил значения и переименовал файл соответственно config.контекстно-свободная грамматика :



[bot_configuration]
server = your.irc.server.com
channel = ##your_channel
botnick = bbot
port = 6667
admins = You,Him


Https://github.com/Djidiouf/bbot/blob/master/config_example.cfg



Наконец, я просто хочу сказать, что все работает на PyCharm 4.5, я только что сделал git clone, переименуйте config_example.cfg, изменив значения, попытался запустить скрипт на Python 3.4.
808   2  

2 ответов:

Ошибка установки из _KEYCRE = re.compile(ur"%\(([^)]+)\)s"), что вызывает синтаксическую ошибку, поскольку префикс ur не поддерживается в python3, pip пытается установить пакет python2.

Ваша первая ошибка-это keyError 'bot_configuration', который не из-за отсутствия установленного configparser, configparser является частью стандартной библиотеки.

bot_configuration KeyError это потому, что python не может найти ваш конфигурационный файл, если вы используете config.read('foobar') в pycharm вы увидите точно такой же вывод

Я понял, что у меня была некоторая непоследовательность в запуске сценария. Когда я был в другой папке, чем мой сценарий, ничего не работало, но когда я был в нем, он работал. Возможно, потому, что конфигурационный файл является общим и используется в основном скрипте и в модуле. На самом деле это связано с необходимостью иметь абсолютный путь в config.read('/some/path/file.cfg')

Наконец, я нахожу этот ответ: https://stackoverflow.com/a/13800583/3301370


Итак, вот решение в случае конфигурации.cfg находясь на корневой каталог проекта / config.cfg :

/bbot.py

import os
config.read(os.path.join(os.path.abspath(os.path.dirname(__file__)), 'config.cfg'))

Однако, поскольку конфигурационный файл является общим и используется в основном скрипте и в субпуте, модуле, правильный путь должен быть установлен и для субмодуля:

/modules/connection.py

import os
config.read(os.path.join(os.path.abspath(os.path.dirname(__file__)), '..', 'config.cfg'))

Он отлично работает в PyCharm, потому что, когда вы нажимаете кнопку Выполнить для вашего скрипта, он запускает его с путем проекта. Тот факт, что наличие относительного пути для обоих операторов config.read() сработало только из-за этого.

Проблема с установкой configparser с pip не связана с этой конкретной проблемой и может быть проигнорирована в этом случае, поскольку configparser является встроенной библиотекой в Python3.

Comments

    Ничего не найдено.