Клиенты недовольны, борются с неизвестными зависимостями DLL

__all__ используется для документирования открытого API модуля Python. Хотя это необязательно, необходимо использовать __all__.

Вот соответствующая выдержка из ссылки на язык языка Python :

Публичные имена определяемые модулем, определяются путем проверки пространства имен модуля для переменной с именем __all__; если определено, это должна быть последовательность строк, которые являются именами, определенными или импортированными этим модулем. Имена, указанные в __all__, считаются общедоступными и должны существовать. Если __all__ не определен, набор общедоступных имен включает все имена, найденные в пространстве имен модуля, которые не начинаются с символа подчеркивания ('_'). __all__ должен содержать весь открытый API. Он предназначен для того, чтобы случайно не экспортировать элементы, которые не являются частью API (например, библиотечные модули, которые были импортированы и использованы в модуле).

blockquote>

PEP 8 использует аналогичную формулировку, хотя также ясно, что импортированные имена не являются частью общедоступного API, когда __all__ отсутствует:

Чтобы лучше поддерживать интроспекцию, модули должны явно объявлять имена в своих открытый API, используя атрибут __all__. Установка __all__ в пустой список указывает, что модуль не имеет открытого API.

[...]

Импортированные имена всегда должны рассматриваться как детали реализации. Другие модули не должны полагаться на косвенный доступ к таким импортированным именам, если они не являются явно документированной частью API-модуля содержащего модуля, например os.path или модуля __init__ пакета, который предоставляет функции из подмодулей.

blockquote >

Кроме того, как указано в других ответах, __all__ используется для включения подстановочных знаков для пакетов :

Оператор import использует следующее соглашение: если код __init__.py пакета определяет список с именем __all__, он считается списком имен модулей, которые должны быть импортированы, когда встречается from package import *.

blockquote>

29
задан wheaties 6 May 2010 в 19:29
поделиться

12 ответов

Если у вас нет тестовой машины, можете ли вы хотя бы использовать виртуальную машину с чистой установкой Windows?

25
ответ дан Nemanja Trifunovic 6 May 2010 в 19:29
поделиться

Вы должны выйти. В своем письме об отказе от ответственности вы должны объяснить, почему ситуация нелепа и приводит вас и клиента к разочарованию. Давайте рассмотрим то, что вы сказали о своей ситуации:

У меня нет тестовой машины. То есть я не могу ни копировать среду клиента, ни пытаться установить приложение в «чистой» системе, чтобы поймать ошибки перед отправкой.

Ни одна профессиональная фирма-разработчик не выпускает продукты без тестовой установки. Мы очень маленькая фирма, и у нас есть множество виртуальных машин, на которых мы проводим тесты и на которых мы запускаем наши установщики.

Я пытался использовать depen.exe, чтобы отследить, от каких версий библиотек DLL зависит мой проект. Я отправляю наш код с распространяемыми файлами, которые мне удалось найти таким образом. После этого это игра ожидания рассерженного клиента.

У меня есть доступ к 64-битной машине и 32-битной машине для установки новых сборок. Там всегда работает.

Это не так уж плохо и не слишком странно. Странно, что вы не знаете, какую DLL вы используете, но ваши работодатели мало что могут для этого сделать, если вы не поддерживаете недокументированную устаревшую систему - тогда они виноваты в том, что ничего не документировали.

К сожалению, вы сказали, что эти системы не являются «чистыми», поэтому очень легко не заметить, какие шаги действительно необходимы для успешной установки продукта.

Мне необходимо использовать стороннюю DLL, которая не может быть зарегистрирована (она чертовски глючит).

Это происходит.

Я не должен использовать Install Shield, любой другой автоматический установщик или писать скрипт установки.

Я даю письменные инструкции о том, как установить приложение (разархивируйте, дважды щелкните исполняемый файл.)

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

Свяжите это с первой проблемой (не имея адекватной установки тестовых платформ), и ваш продукт обязательно выйдет из строя. Ваши клиенты ДОЛЖНЫ быть безумными, и вы должны быть такими же. Ситуация, которую создали ваши работодатели, не способствует развитию успешного продукта. Проще говоря, вы ничего не можете сделать, пока эти проблемы не будут решены.

33
ответ дан Paul D. Waite 6 May 2010 в 19:29
поделиться

Могут ли некоторые из ваших зависимостей быть статически связаны?

6
ответ дан erjiang 6 May 2010 в 19:29
поделиться

Включаете ли вы определенные библиотеки DLL в свою установку?

Если это так, то это неправильный путь. Вместо этого вы должны включить распространяемый пакет MS для вашего компилятора. Например, если вы компилируете с использованием MSVC 8.0 с пакетом обновления 1 (SP1), вы получите этот пакет и установите его вместе с приложением:

Распространяемый пакет Microsoft Visual C ++ 2008 SP1 (x86)

Каждая версия MSCV (включая уровень SP) имеет свой собственный пакет для переадресации. Убедитесь, что вы выбрали правильный вариант для своего компилятора.

После того, как вы потушите огонь, сядьте со своим боссом и убедите его, что если вы собираетесь притворяться софтверной компанией, вы должны вести себя как один. Получите реальную производственную среду. Это не клуб программирования для средней школы, это ваша жизнь.

РЕДАКТИРОВАТЬ: Просто чтобы быть ясно. Как только вы получите переадресацию, не распаковывайте ее на свой компьютер, а затем включите закодированные библиотеки DLL в вашу настройку. Вместо этого, включите весь установщик Redist в качестве подэтапа вашей установки. Сначала установите Redist, а затем установите свой код.

5
ответ дан John Dibling 6 May 2010 в 19:29
поделиться

Другие люди дали вам общий ответ; Вот пара небольших предложений, которые могут оказаться полезными в случае, если вы не можете предпринять более масштабные действия:

  • перечислите, от каких библиотек DLL зависит ваше приложение. Если вы точно не знаете, от чего зависит ваше приложение, как вы можете убедиться, что зависимости доступны?
  • Напишите утилиту, которая ищет и регистрирует любой экземпляр этих DLL в системе, а также версию DLL и путь к системе. Если у пользователя возникают проблемы, эта утилита может помочь вам решить проблему, поскольку вы упомянули, что у вас нет физического или сетевого доступа к машинам, на которых обнаружена проблема.
  • напишите утилиту, которая ничего не делает, кроме LoadLibrary() ваших зависимостей. Ошибки могут регистрироваться, и, по крайней мере, у вас будет простой способ определить, что не так на компьютере клиента.

Надеемся, что общие проблемы будут выяснены быстро и исправлены, так что они перестанут быть общими, и вам будет все меньше и меньше нужно использовать эти инструменты. Но пока вы не разберетесь с проблемами, они могут оказаться полезными.

Кроме того, в одном комментарии вы упоминаете, что проблема вызвана системными DLL-библиотеками Windows - они, как правило, должны вызывать несколько проблем с «адским DLL» в современных системах, поскольку стороннее программное обеспечение (включая ваше) обычно не может заменить их. Все системы Windows должны получать то, что предоставляет MS, и MS довольно хороша (хотя и не обязательно совершенна) в том, чтобы делать новые обратно совместимыми. Если это вызывает у вас проблемы, возможно, вы захотите опубликовать подробности того, какие библиотеки DLL (и, возможно, версии), чтобы люди могли ответить с более подробной информацией, например, о том, что может потребоваться настроить, чтобы убедиться, что программа установки Windows устанавливает DLL.

8
ответ дан Michael Burr 6 May 2010 в 19:29
поделиться

Представьте это своему боссу следующим образом:
Машина для тестирования установок намного дешевле, чем разозленный клиент или даже ваше ВРЕМЯ в отслеживании проблем.

7
ответ дан NotMe 6 May 2010 в 19:29
поделиться

Если вы передадите полный, абсолютный путь к LoadLibrary(), он будет искать только в этом точном месте для DLL. Вы можете использовать это, чтобы обойти некоторые из ваших проблем. Упакуйте все библиотеки DLL, которые нужны вашему приложению, в папку «lib» и включите их в zip-файл вместе с вашей программой. Пока папка "lib" находится в той же папке, что и файл .exe, вы можете использовать GetCurrentDirectory для создания абсолютных путей к этим библиотекам и убедиться, что загружаемые библиотеки являются теми же, которые вы использовали при тестировании программного обеспечения. Однако если вы используете библиотеку, у которой нет прав на распространение, этот метод не очень полезен.

2
ответ дан bta 6 May 2010 в 19:29
поделиться

У меня нет тестовой машины. То есть я не могу ни копировать среду клиента, ни пытаться установить приложение на «чистую» систему, чтобы ловить ошибки перед отправкой.

Этот тип настройки обычно никогда не заканчивается хорошо. Независимо от того, насколько вы хороши, всегда будут существенные различия между машинами разработчика и машинами заказчика. С одной стороны, Visual Studio имеет тенденцию включать в себя кучу времени выполнения, от которого ваше приложение может зависеть, ничего не сказав. Настройка виртуальной машины не очень сложна. Я использую VMWare Workstation для эмуляции всех видов различных машин. Единственное требование - наличие лицензий на операционные системы и программы, которые вы хотите установить на виртуальных машинах. VMWare предлагает 30-дневную бесплатную пробную версию, и после этого я считаю, что $ 189.

9
ответ дан Pang 6 May 2010 в 19:29
поделиться

Вы уверены, что версия и пакет обновления для Windows, на которой вы разрабатываете, «похожи» на машины клиентов? Если нет, попробуйте с этим. Иногда разные SP являются виновниками игры.

Вы можете использовать виртуальные машины, как всем советовали, или вы можете иметь (Norton) Ghost-образы различных версий и SP, но опять же ваше предприятие должно нести стоимость машины.

0
ответ дан Abhineet 6 May 2010 в 19:29
поделиться

только для ознакомления: У вас есть этот распространяемый пакет? http://www.microsoft.com/downloads/details.aspx?familyid=9b2da534-3e03-4391-8a4d-074b9f2bc1bf&displaylang=en

Это помогает мне.

3
ответ дан Seboeh 6 May 2010 в 19:29
поделиться

Я бы проверил VMWare. Это довольно крутая виртуальная машина, и вы, вероятно, могли бы имитировать среду клиента.

Кроме того, я хотел бы поговорить с вашим боссом. Вполне возможно, что они предполагают, что продукт, который вы отправили, был тщательно протестирован вами. Так что это, вероятно, недопонимание, и я бы поговорил с ним просто для уверенности. Если ваш начальник не понимает вашу точку зрения, я бы определенно подумал о том, чтобы уйти, потому что случится так, что он заявит, что ему нужно «поговорить с вами» и «привести вас в порядок» всякий раз, когда продукт станет успешным. Вполне возможно, что в вашем обзоре он отметил, что вы не сотрудничали или были худшими. Поэтому лучше всего поговорить, а затем сформировать решение, основанное на том, стоит ли вам продолжать работать в компании.

1
ответ дан Daniel 6 May 2010 в 19:29
поделиться

Вы можете запросить у клиента доступ к VPN или что-то подобное, чтобы вы могли использовать его среду.

2
ответ дан samoz 6 May 2010 в 19:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: