Чувствительность к регистру с именами модулей и файлов в python 2.7.15 - PullRequest
0 голосов
/ 28 января 2019

Я столкнулся с довольно забавной ситуацией: я работаю в большом научном сотрудничестве, основной пакет программ которого основан на C ++ и python (все еще 2.7.15).Это сотрудничество также имеет несколько серверов (SL6) для запуска платформы.Поскольку я недавно присоединился к совместной работе, я получил инструкции о том, как настроить программное обеспечение и запустить его.Все отлично работает на сервере.Теперь есть причины не подключаться к серверу для выполнения простых задач или разработки кода, вместо этого предпочтительнее делать подобные вещи на локальном ноутбуке.Таким образом, я настроил виртуальную машину (докер) в соответствии с полученным рецептом, установил несколько вещей (fuse, cvmfs, образы докеров и т. Д.) И таким образом сумел подключить мой MacBook (OSX 10.14.2) ксервер, на котором необходимо найти некоторые библиотеки, чтобы программное обеспечение было скомпилировано и запущено.И через 2 часа он компилируется!Пока все хорошо ..

Теперь самое интересное: вы запускаете программное обеспечение, выполняя определенный скрипт python, который подается в качестве аргумента другому скрипту python.Еще не смешно.Но где-то в этом большом списке сценариев Python, порождающих друг друга, есть очень простая задача:

import logging
variable = logging.DEBUG

Это написано внутри скрипта, который называется Logging.py.Таким образом, скрипт и библиотека различаются только по первой букве: l или L. На сервере это работает идеально гладко.На моей локальной виртуальной машине я получаю ошибку

AttributeError: у объекта 'module' нет атрибута 'DEBUG'

Я проверил версии Python (which python) и расположение библиотеки журналов (print logging.__file__), и в обоих случаях я получаю одинаковый результат для обеих команд.Таким образом, запускается та же версия Python, и та же библиотека журналов, но в одном случае происходит смешивание с именем файла, который является источником библиотеки.

Поэтому мне интересно, есть ли какой-нибудь "файл соглашения" (например, .vimrc для vi), где-то, где эта проблема может быть решена путем установки некоторого параметра допуска в какое-то другое значение ...?

Большое спасибо за помощь!Конни

1 Ответ

0 голосов
/ 28 января 2019

, как уже говорили другие, OSX по умолчанию обрабатывает имена как нечувствительные к регистру, поэтому связанный с Python модуль logging будет перепутан с вашим Logging.py файлом.Я бы посоветовал лучше исправить переименование файла Logging.py, так как это улучшит совместимость базы кода.в противном случае, вы можете создать файловую систему APFS с учетом регистра с помощью «Дисковой утилиты»

, если вы собираетесь создать файловую систему, я бы посоветовал не менять корневой / системный раздел на регистр, так какэто разрушит различные программы тонкими способами.Вы можете либо перераспределить ваш диск и создать файловую систему с учетом регистра, либо создать «образ» (это может быть медленнее, не знаю, сколько) и работать там.Просто убедитесь, что вы выбрали формат «APFS (с учетом регистра)» при создании файловой системы!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...