Документация Python неофициальный перевод

windows.md

420 строк · 41.5 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/2.6/faq/windows.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# [Python в Windows: часто задаваемые вопросы](https://python-all.ru/2.6/faq/windows.html#id1)89Содержание1011- [FAQ по Python в Windows](https://python-all.ru/2.6/faq/windows.html#python-on-windows-faq)1213  - [Как запустить программу Python в Windows?](https://python-all.ru/2.6/faq/windows.html#how-do-i-run-a-python-program-under-windows)14  - [Как сделать скрипты Python исполняемыми?](https://python-all.ru/2.6/faq/windows.html#how-do-i-make-python-scripts-executable)15  - [Почему Python иногда так долго запускается?](https://python-all.ru/2.6/faq/windows.html#why-does-python-sometimes-take-so-long-to-start)16  - [Где найти Freeze для Windows?](https://python-all.ru/2.6/faq/windows.html#where-is-freeze-for-windows)17  - [Является ли файл `*.pyd` тем же самым, что и DLL?](https://python-all.ru/2.6/faq/windows.html#is-a-pyd-file-the-same-as-a-dll)18  - [Как встроить Python в приложение Windows?](https://python-all.ru/2.6/faq/windows.html#how-can-i-embed-python-into-a-windows-application)19  - [Как использовать Python для CGI?](https://python-all.ru/2.6/faq/windows.html#how-do-i-use-python-for-cgi)20  - [Как запретить редакторам вставлять табуляцию в исходный код Python?](https://python-all.ru/2.6/faq/windows.html#how-do-i-keep-editors-from-inserting-tabs-into-my-python-source)21  - [Как проверить нажатие клавиши без блокировки?](https://python-all.ru/2.6/faq/windows.html#how-do-i-check-for-a-keypress-without-blocking)22  - [Как эмулировать os.kill() в Windows?](https://python-all.ru/2.6/faq/windows.html#how-do-i-emulate-os-kill-in-windows)23  - [Почему os.path.isdir() не работает с общими каталогами NT?](https://python-all.ru/2.6/faq/windows.html#why-does-os-path-isdir-fail-on-nt-shared-directories)24  - [cgi.py (или другие CGI-программы) иногда не работают на NT или win95!](https://python-all.ru/2.6/faq/windows.html#cgi-py-or-other-cgi-programming-doesn-t-work-sometimes-on-nt-or-win95)25  - [Почему os.popen() не работает в PythonWin на NT?](https://python-all.ru/2.6/faq/windows.html#why-doesn-t-os-popen-work-in-pythonwin-on-nt)26  - [Почему os.popen()/win32pipe.popen() не работают на Win9x?](https://python-all.ru/2.6/faq/windows.html#why-doesn-t-os-popen-win32pipe-popen-work-on-win9x)27  - [PyRun\_SimpleFile() падает на Windows, но не на Unix; почему?](https://python-all.ru/2.6/faq/windows.html#pyrun-simplefile-crashes-on-windows-but-not-on-unix-why)28  - [Импорт \_tkinter не удаётся на Windows 95/98: почему?](https://python-all.ru/2.6/faq/windows.html#importing-tkinter-fails-on-windows-95-98-why)29  - [Как извлечь загруженную документацию в Windows?](https://python-all.ru/2.6/faq/windows.html#how-do-i-extract-the-downloaded-documentation-on-windows)30  - [Отсутствует cw3215mt.dll (или cw3215.dll)](https://python-all.ru/2.6/faq/windows.html#missing-cw3215mt-dll-or-missing-cw3215-dll)31  - [Предупреждение о версии CTL3D32 от установщика](https://python-all.ru/2.6/faq/windows.html#warning-about-ctl3d32-version-from-installer)3233## [Как запустить программу Python в Windows?](https://python-all.ru/2.6/faq/windows.html#id2)3435Это не обязательно простой вопрос. Если вы уже знакомы с запуском программ из командной строки Windows, всё покажется очевидным; в противном случае может потребоваться немного больше пояснений. Также существуют различия между Windows 95, 98, NT, ME, 2000 и XP, которые могут добавить путаницы.3637[![Разработка Python на XP](https://python-all.ru/2.6/_images/python-video-icon.png)](https://python-all.ru/2.6/faq/windows.html)3839[Разработка Python на XP](https://python-all.ru/2.6/faq/windows.html)4041Эта серия скринкастов поможет начать работу с Python на Windows XP. Материал умещается в 1,5 часа и позволит освоить правильный дистрибутив Python, программирование в выбранной среде IDE, а также отладку и написание надёжного кода с модульными тестами.4243Если вы не используете какую-либо интегрированную среду разработки, вам придётся *вводить* команды Windows в то, что по-разному называют «окном DOS» или «окном командной строки». Обычно такое окно можно создать из меню «Пуск»; в Windows 2000 нужно выбрать *Пуск ‣ Программы ‣ Стандартные ‣ Командная строка*. Вы узнаете, что окно открыто, по приглашению командной строки Windows, которое обычно выглядит так:4445```python46C:\>47```4849Буква может быть другой, и после неё могут быть ещё символы, так что можно увидеть, например, такое:5051```python52D:\Steve\Projects\Python>53```5455в зависимости от настроек компьютера и от недавних действий на нём. Как только такое окно открыто, можно смело приступать к запуску программ Python.5657Необходимо понимать, что ваши скрипты Python должны обрабатываться другой программой, называемой интерпретатором Python. Интерпретатор читает скрипт, компилирует его в байт-код, а затем выполняет байт-код для запуска программы. Итак, как сделать так, чтобы интерпретатор обработал ваш код Python?5859First, you need to make sure that your command window recognises the word “python” as an instruction to start the interpreter. If you have opened a command window, you should try entering the command `python` and hitting return. You should then see something like:6061```python62Python 2.2 (#28, Dec 21 2001, 12:21:22) [MSC 32 bit (Intel)] on win3263Type "help", "copyright", "credits" or "license" for more information.64>>>65```6667Интерпретатор запущен в «интерактивном режиме». Это означает, что можно вводить операторы или выражения Python в интерактивном режиме и сразу же получать их выполнение или вычисление. Это одна из самых сильных сторон Python. Проверьте это, введя несколько выражений на свой выбор и увидев результаты:6869```python70>>> print "Hello"71Hello72>>> "Hello" * 373HelloHelloHello74```7576Многие используют интерактивный режим как удобный, но при этом с широкими возможностями программирования калькулятор. Чтобы завершить сеанс Python в интерактивном режиме, удерживайте клавишу Ctrl и нажмите Z, затем нажмите Enter, чтобы вернуться в командную строку Windows.7778Вы также можете обнаружить, что у вас есть пункт меню «Пуск», такой как *Пуск ‣ Программы ‣ Python 2.2 ‣ Python (командная строка)*, в результате чего вы видите приглашение `>>>` в новом окне. Если это так, окно исчезнет после ввода символа Ctrl-Z; Windows выполняет единственную команду «python» в этом окне и закрывает его при завершении интерпретатора.7980Если команда `python` вместо отображения приглашения интерпретатора `>>>` выводит сообщение вида:8182```python83'python' is not recognized as an internal or external command,84operable program or batch file.85```8687[![Добавление Python в путь DOS](https://python-all.ru/2.6/_images/python-video-icon.png)](https://python-all.ru/2.6/faq/windows.html)8889[Добавление Python в путь DOS](https://python-all.ru/2.6/faq/windows.html)9091Python не добавляется в путь DOS по умолчанию. Этот скринкаст покажет шаги по добавлению правильной записи в *системный путь*, что позволит всем пользователям запускать Python из командной строки.9293или:9495```python96Bad command or filename97```9899тогда необходимо убедиться, что компьютер знает, где найти интерпретатор Python. Для этого нужно изменить переменную PATH – список каталогов, в которых Windows ищет программы.100101Следует настроить добавление каталога установки Python в PATH каждого командного окна при его запуске. Если вы установили Python недавно, то команда102103```python104dir C:\py*105```106107will probably tell you where it is installed; the usual location is something like `C:\Python23`. Otherwise you will be reduced to a search of your whole disk ... use *Tools ‣ Find* or hit the **Search** button and look for “python.exe”. Supposing you discover that Python is installed in the `C:\Python23` directory (the default at the time of writing), you should make sure that entering the command108109```python110c:\Python23\python111```112113starts up the interpreter as above (and don’t forget you’ll need a “CTRL-Z” and an “Enter” to get out of it). Once you have verified the directory, you need to add it to the start-up routines your computer goes through. For older versions of Windows the easiest way to do this is to edit the `C:\AUTOEXEC.BAT` file. You would want to add a line like the following to `AUTOEXEC.BAT`:114115```python116PATH C:\Python23;%PATH%117```118119Для Windows NT, 2000 и (я предполагаю) XP вам нужно будет добавить строку, например120121```python122;C:\Python23123```124125в текущее значение переменной среды PATH, которое можно найти в окне свойств «Мой компьютер» на вкладке «Дополнительно». Обратите внимание: если у вас достаточно прав, вы можете выбрать установку параметров либо для текущего пользователя, либо для системы. Последний вариант предпочтительнее, если вы хотите, чтобы все пользователи могли запускать Python на этом компьютере.126127If you aren’t confident doing any of these manipulations yourself, ask for help! At this stage you may want to reboot your system to make absolutely sure the new setting has taken effect. You probably won’t need to reboot for Windows NT, XP or 2000. You can also avoid it in earlier versions by editing the file `C:\WINDOWS\COMMAND\CMDINIT.BAT` instead of `AUTOEXEC.BAT`.128129You should now be able to start a new command window, enter `python` at the `C:\>` (or whatever) prompt, and see the `>>>` prompt that indicates the Python interpreter is reading interactive commands.130131Let’s suppose you have a program called `pytest.py` in directory `C:\Steve\Projects\Python`. A session to run that program might look like this:132133```python134C:\> cd \Steve\Projects\Python135C:\Steve\Projects\Python> python pytest.py136```137138Because you added a file name to the command to start the interpreter, when it starts up it reads the Python script in the named file, compiles it, executes it, and terminates, so you see another `C:\>` prompt. You might also have entered139140```python141C:\> python \Steve\Projects\Python\pytest.py142```143144если бы не хотели менять текущий каталог.145146Under NT, 2000 and XP you may well find that the installation process has also arranged that the command `pytest.py` (or, if the file isn’t in the current directory, `C:\Steve\Projects\Python\pytest.py`) will automatically recognize the “.py” extension and run the Python interpreter on the named file. Using this feature is fine, but *some* versions of Windows have bugs which mean that this form isn’t exactly equivalent to using the interpreter explicitly, so be careful.147148Важно запомнить следующее:1491501. Запускайте Python из меню «Пуск» или убедитесь, что PATH настроен правильно, чтобы Windows мог найти интерпретатор Python.151152   ```python153   python154   ```155156   должно выдать приглашение «\>\>\>» от интерпретатора Python. Не забудьте нажать CTRL-Z и ENTER для завершения интерпретатора (и, если вы открыли окно из меню «Пуск», окно исчезнет).1572. Когда это заработает, вы сможете запускать программы с помощью команд:158159   ```python160   python {program-file}161   ```1623. Когда вы узнаете нужные команды, вы сможете создать ярлыки Windows для запуска интерпретатора Python для ваших скриптов, указав конкретные рабочие каталоги и добавив их в меню. Взгляните на163164   ```python165   python --help166   ```167168   если ваши задачи сложны.1694. Интерактивный режим (где вы видите приглашение `>>>`) лучше всего подходит для проверки того, что отдельные инструкции и выражения делают то, что вы ожидаете, а также для разработки кода экспериментальным путём.170171## [Как сделать скрипты Python исполняемыми?](https://python-all.ru/2.6/faq/windows.html#id3)172173On Windows 2000, the standard Python installer already associates the .py extension with a file type (Python.File) and gives that file type an open command that runs the interpreter (`D:\Program Files\Python\python.exe "%1" %*`). This is enough to make scripts executable from the command prompt as ‘foo.py’. If you’d rather be able to execute the script by simple typing ‘foo’ with no extension you need to add .py to the PATHEXT environment variable.174175В Windows NT действия, выполняемые установщиком, как описано выше, позволяют запускать скрипт с помощью «foo.py», но давняя ошибка в командном процессоре NT не позволяет перенаправлять ввод или вывод любого скрипта, выполняемого таким образом. Это часто важно.176177Инструкция для того, чтобы сделать скрипт Python исполняемым в WinNT, – дать файлу расширение .cmd и добавить следующую строку в качестве первой:178179```python180@setlocal enableextensions & python -x %~f0 %* & goto :EOF181```182183## [Почему Python иногда так долго запускается?](https://python-all.ru/2.6/faq/windows.html#id4)184185Обычно Python запускается в Windows очень быстро, но иногда поступают сообщения об ошибках, что Python внезапно начинает долго запускаться. Это кажется ещё более странным, потому что на других системах Windows с, казалось бы, идентичной конфигурацией Python работает нормально.186187Проблема может быть вызвана неправильной настройкой антивирусного ПО на проблемной машине. Известно, что некоторые антивирусные сканеры увеличивают время запуска на два порядка, если они настроены на мониторинг всех операций чтения файловой системы. Проверьте настройки антивирусного ПО на ваших системах, чтобы убедиться, что они действительно настроены одинаково. McAfee, будучи настроенным на сканирование всех операций чтения файловой системы, особенно этим грешит.188189## [Где Freeze для Windows?](https://python-all.ru/2.6/faq/windows.html#id5)190191Freeze – это программа, которая позволяет распространять программу Python в виде одного автономного исполняемого файла. Это *не* компилятор; ваши программы не работают быстрее, но их легче распространять, по крайней мере на платформах с той же ОС и процессором. Прочтите файл README программы freeze для получения дополнительных оговорок.192193You can use freeze on Windows, but you must download the source tree (see [http://www.python.org/download/source](https://python-all.ru/2.6/faq/windows.html)). The freeze program is in the `Tools\freeze` subdirectory of the source tree.194195Вам понадобится компилятор Microsoft VC++, и, вероятно, потребуется собрать Python. Необходимые файлы проекта находятся в каталоге PCbuild.196197## [Является ли файл `*.pyd` тем же, что и DLL?](https://python-all.ru/2.6/faq/windows.html#id6)198199Да, файлы .pyd – это DLL, но есть несколько отличий. Если у вас есть DLL с именем `foo.pyd`, то в ней должна быть функция `initfoo()`. После этого можно написать в Python «import foo», и Python будет искать foo.pyd (а также foo.py, foo.pyc) и, если найдёт, попытается вызвать `initfoo()` для её инициализации. Не нужно компоновать .exe с foo.lib, поскольку это заставит Windows требовать наличия этой DLL.200201Обратите внимание, что путь поиска для foo.pyd – это PYTHONPATH, а не тот путь, который Windows использует для поиска foo.dll. Кроме того, foo.pyd не обязательно должен присутствовать для запуска вашей программы, тогда как если вы слинковали программу с DLL, эта DLL требуется. Разумеется, foo.pyd необходим, если вы хотите написать `import foo`. В DLL связывание объявляется в исходном коде с помощью `__declspec(dllexport)`. В .pyd связывание определяется в списке доступных функций.202203## [Как встроить Python в приложение Windows?](https://python-all.ru/2.6/faq/windows.html#id7)204205Встраивание интерпретатора Python в приложение Windows можно резюмировать следующим образом:2062071. Не встраивайте Python непосредственно в файл .exe. В Windows Python должен быть DLL для обработки импорта модулей, которые сами являются DLL. (Это первое ключевое недокументированное обстоятельство.) Вместо этого линкуйтесь с `pythonNN.dll`; он обычно устанавливается в `C:\Windows\System`. NN – это версия Python, число, например «23» для Python 2.3.208209   Можно линковаться с Python статически или динамически. Статическая линковка подразумевает линковку с `pythonNN.lib`, а динамическая – с `pythonNN.dll`. Недостаток динамической линковки в том, что приложение не запустится, если `pythonNN.dll` отсутствует в системе. (Общее примечание: `pythonNN.lib` – это так называемая «import lib», соответствующая `python.dll`. Она лишь определяет символы для компоновщика.)210211   Динамическая линковка значительно упрощает параметры линковки; всё происходит во время выполнения. Ваш код должен загружать `pythonNN.dll` с помощью функции Windows `LoadLibraryEx()`. Код также должен использовать функции доступа и данные из `pythonNN.dll` (то есть из C API Python), используя указатели, полученные с помощью функции Windows `GetProcAddress()`. Макросы могут сделать использование этих указателей прозрачным для любого C-кода, который вызывает функции из C API Python.212213   Примечание для Borland: сначала преобразуйте `pythonNN.lib` в формат OMF с помощью Coff2Omf.exe.2142. Если вы используете SWIG, легко создать Python-«модуль расширения», который сделает данные и методы приложения доступными для Python. SWIG возьмет на себя практически все рутинные детали. В результате получается код на C, который вы встраиваете *в* свой .exe-файл (!) Вам не нужно создавать DLL-файл, и это также упрощает связывание.2153. SWIG создаст функцию инициализации (функцию на C), имя которой зависит от имени модуля расширения. Например, если модуль называется leo, функция инициализации будет называться initleo(). Если вы используете классы-тени SWIG (а это стоит делать), функция инициализации будет называться initleoc(). Она инициализирует в основном скрытый вспомогательный класс, используемый классом-тенью.216217   Причина, по которой можно скомпоновать код на C из шага 2 прямо в .exe-файл, в том, что вызов функции инициализации эквивалентен импорту модуля в Python! (Это второй ключевой недокументированный факт.)2184. Кратко: следующий код позволяет инициализировать интерпретатор Python вместе с вашим модулем расширения.219220   ```c221   #include "python.h"222   ...223   Py_Initialize();  // Инициализировать Python.224   initmyAppc();  // Инициализировать (импортировать) вспомогательный класс.225   PyRun_SimpleString("import myApp") ;  // Импортировать теневой класс.226   ```2275. Есть две проблемы с C API Python, которые проявятся, если вы используете компилятор, отличный от MSVC (компилятор, которым собрана pythonNN.dll).228229   Проблема 1: Так называемые «очень высокоуровневые» функции, принимающие аргументы FILE \*, не будут работать в среде с несколькими компиляторами, поскольку каждый компилятор имеет свое представление о struct FILE. С точки зрения реализации это очень \_низкоуровневые\_ функции.230231   Проблема 2: SWIG генерирует следующий код при создании обёрток для функций, возвращающих void:232233   ```c234   Py_INCREF(Py_None);235   _resultobj = Py_None;236   return _resultobj;237   ```238239   Увы, Py\_None – это макрос, который разворачивается в ссылку на сложную структуру данных \_Py\_NoneStruct внутри pythonNN.dll. И этот код тоже не будет работать в среде с несколькими компиляторами. Замените такой код на:240241   ```c242   return Py_BuildValue("");243   ```244245   Возможно, для автоматического внесения изменений можно использовать команду SWIG `%typemap`, хотя мне не удалось заставить это работать (я полный новичок в SWIG).2466. Использовать скрипт оболочки Python для вызова окна интерпретатора из вашего Windows-приложения – плохая идея: полученное окно будет независимо от оконной системы приложения. Вместо этого вам (или классу wxPythonWindow) следует создать «родное» окно интерпретатора. Подключить это окно к интерпретатору Python несложно. Вы можете перенаправить ввод-вывод Python на \_любой\_ объект, поддерживающий чтение и запись, так что всё, что нужно – это объект Python (определённый в вашем модуле расширения) с методами read() и write().247248## [Как использовать Python для CGI?](https://python-all.ru/2.6/faq/windows.html#id8)249250На сервере Microsoft IIS или на Win95 MS Personal Web Server Python настраивается так же, как и любой другой скриптовый движок.251252Запустите regedt32 и перейдите к:253254```python255HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\ScriptMap256```257258и введите следующую строку (внеся необходимые изменения, требуемые вашей системой):259260```python261.py :REG_SZ: c:\<path to python>\python.exe -u %s %s262```263264Эта строка позволит вам вызывать ваш скрипт по простой ссылке, например: `http://yourserver/scripts/yourscript.py` при условии, что «scripts» является исполняемым каталогом для вашего сервера (обычно это так по умолчанию). Флаг [*-u*](https://python-all.ru/2.6/using/cmdline.html#cmdoption-u) задаёт небуферизированный и двоичный режимы для stdin – необходимо при работе с двоичными данными.265266Кроме того, рекомендуется не использовать расширение «.py» в данном контексте (возможно, стоит оставить `*.py` для вспомогательных модулей и использовать `*.cgi` или `*.cgp` для скриптов «главной программы»).267268Чтобы настроить Internet Information Services 5 на использование Python для обработки CGI, обратитесь к следующим ссылкам:269270> [http://www.e-coli.net/pyiis\_server.html](https://python-all.ru/2.6/faq/windows.html)271>272> (для Win2k Server)273>274> [http://www.e-coli.net/pyiis.html](https://python-all.ru/2.6/faq/windows.html)275>276> (для Win2k pro)277278Настройка Apache значительно проще. В конфигурационном файле Apache `httpd.conf` добавьте следующую строку в конец файла:279280```python281ScriptInterpreterSource Registry282```283284Затем дайте вашим CGI-скриптам Python расширение .py и поместите их в каталог cgi-bin.285286## [How do I keep editors from inserting tabs into my Python source?](https://python-all.ru/2.6/faq/windows.html#id9)287288The FAQ does not recommend using tabs, and the Python style guide, [**PEP 8**](https://python-all.ru/2.6/faq/windows.html), recommends 4 spaces for distributed Python code; this is also the Emacs python-mode default.289290Under any editor, mixing tabs and spaces is a bad idea. MSVC is no different in this respect, and is easily configured to use spaces: Take *Tools ‣ Options ‣ Tabs*, and for file type “Default” set “Tab size” and “Indent size” to 4, and select the “Insert spaces” radio button.291292Если вы подозреваете, что смешение табуляции и пробелов вызывает проблемы в начальных отступах, запустите Python с ключом [*-t*](https://python-all.ru/2.6/using/cmdline.html#cmdoption-t) или выполните `Tools/Scripts/tabnanny.py` для проверки дерева каталогов в пакетном режиме.293294## [How do I check for a keypress without blocking?](https://python-all.ru/2.6/faq/windows.html#id10)295296Используйте модуль msvcrt. Это стандартный модуль расширения для Windows. Он определяет функцию `kbhit()`, которая проверяет, есть ли нажатие клавиши, и `getch()`, которая получает один символ без его отображения.297298## [Как эмулировать os.kill() в Windows?](https://python-all.ru/2.6/faq/windows.html#id11)299300Чтобы завершить процесс, можно использовать ctypes:301302```python303import ctypes304305def kill(pid):306    """функция kill для Win32"""307    kernel32 = ctypes.windll.kernel32308    handle = kernel32.OpenProcess(1, 0, pid)309    return (0 != kernel32.TerminateProcess(handle, 0))310```311312## [Почему os.path.isdir() не работает в общих каталогах NT?](https://python-all.ru/2.6/faq/windows.html#id12)313314Решением, по-видимому, является добавление «\\» в конце общих дисков.315316```python317>>> import os318>>> os.path.isdir( '\\\\rorschach\\public')3190320>>> os.path.isdir( '\\\\rorschach\\public\\')3211322```323324Полезно представлять точки общего доступа как буквы дисков. Пример:325326```python327k: is not a directory328k:\ is a directory329k:\media is a directory330k:\media\ is not a directory331```332333Те же правила действуют, если заменить «k:» на «\\conkyfoo»:334335```python336\\conky\foo  is not a directory337\\conky\foo\ is a directory338\\conky\foo\media is a directory339\\conky\foo\media\ is not a directory340```341342## [cgi.py (или другие CGI-программы) иногда не работают на NT или win95!](https://python-all.ru/2.6/faq/windows.html#id13)343344Убедитесь, что у вас установлена последняя версия python.exe, что вы используете python.exe, а не GUI-версию Python, и что сервер настроен на выполнение345346```python347"...\python.exe -u ..."348```349350Для выполнения CGI. Опция [*-u*](https://python-all.ru/2.6/using/cmdline.html#cmdoption-u) (unbuffered) на NT и Win95 не даёт интерпретатору изменять символы новой строки в стандартном вводе и выводе. Без неё POST/multipart запросы будут казаться неправильной длины, а двоичные ответы (например, GIF) могут искажаться (что приводит к повреждённым изображениям, файлам PDF и другим сбоям при загрузке двоичных файлов).351352## [Почему os.popen() не работает в PythonWin на NT?](https://python-all.ru/2.6/faq/windows.html#id14)353354Причина, по которой os.popen() не работает из PythonWin, заключается в ошибке в библиотеке времени выполнения C (CRT) от Microsoft. CRT предполагает, что к процессу подключена консоль Win32.355356Вместо этого следует использовать popen() из модуля win32pipe, который не зависит от наличия подключённой консоли Win32.357358Пример:359360```python361import win32pipe362f = win32pipe.popen('dir /c c:\\')363print f.readlines()364f.close()365```366367## [Почему os.popen()/win32pipe.popen() не работают на Win9x?](https://python-all.ru/2.6/faq/windows.html#id15)368369В Win9x есть ошибка, которая не позволяет os.popen/win32pipe.popen\* работать. Хорошая новость в том, что существует способ обойти эту проблему. Статья базы знаний Microsoft, которую нужно посмотреть: Q150956. Ссылки на базу знаний можно найти здесь: [http://support.microsoft.com/](https://python-all.ru/2.6/faq/windows.html).370371## [PyRun\_SimpleFile() падает на Windows, но не на Unix; почему?](https://python-all.ru/2.6/faq/windows.html#id16)372373Это очень чувствительно к поставщику компилятора, версии и (возможно) даже опциям. Если структура FILE\* в вашей встраивающей программе не совпадает с той, которую ожидает интерпретатор Python, это не сработает.374375DLL-библиотеки Python 1.5.\* (`python15.dll`) все скомпилированы с помощью MS VC++ 5.0 и с опциями многопоточных DLL (`/MD`).376377Если вы не можете изменить компиляторы или флаги, попробуйте использовать `Py_RunSimpleString()`. Хитрость, чтобы заставить его выполнить произвольный файл, состоит в том, чтобы сконструировать вызов [`execfile()`](https://python-all.ru/2.6/library/functions.html#execfile) с именем вашего файла в качестве аргумента.378379Также обратите внимание, что нельзя смешивать отладочные и релизные версии. Если вы хотите использовать отладочную многопоточную DLL, то имя вашего модуля *должно* содержать «\_d» в конце базового имени.380381## [Импорт \_tkinter не выполняется на Windows 95/98: почему?](https://python-all.ru/2.6/faq/windows.html#id17)382383Иногда импорт \_tkinter не удаётся на Windows 95 или 98, выдавая сообщение примерно следующего содержания:384385```python386ImportError: DLL load failed: One of the library files needed387to run this application cannot be found.388```389390Возможно, вы не установили Tcl/Tk, но если вы установили Tcl/Tk, и приложение Wish работает правильно, проблема может быть в том, что его установщик не смог правильно отредактировать файл autoexec.bat. Он пытается добавить строку, изменяющую переменную среды PATH, чтобы включить подкаталог «bin» Tcl/Tk, но иногда это редактирование не срабатывает. Открыв его в блокноте, обычно можно понять, в чём проблема.391392(Дополнительный совет от David Szafranski: здесь нельзя использовать длинные имена файлов; например, используйте `C:\PROGRA~1\Tcl\bin` вместо `C:\Program Files\Tcl\bin`.)393394## [Как извлечь загруженную документацию в Windows?](https://python-all.ru/2.6/faq/windows.html#id18)395396Иногда при загрузке пакета документации в Windows через браузер расширение сохранённого файла оказывается .EXE. Это ошибка; расширение должно быть .TGZ.397398Просто переименуйте загруженный файл, чтобы расширение стало .TGZ, и WinZip сможет его обработать. (Если ваша версия WinZip не может, загрузите новую с [http://www.winzip.com](https://python-all.ru/2.6/faq/windows.html).)399400## [Отсутствует cw3215mt.dll (или отсутствует cw3215.dll)](https://python-all.ru/2.6/faq/windows.html#id19)401402Иногда при использовании Tkinter в Windows возникает ошибка об отсутствии cw3215mt.dll или cw3215.dll.403404Причина: в пути поиска DLL находится старая DLL Tcl/Tk, собранная с помощью cygwin (вероятно, `C:\Windows`). Необходимо использовать DLL Tcl/Tk из стандартной установки Tcl/Tk (Python 1.5.2 поставляется с одной из них).405406## [Предупреждение о версии CTL3D32 от установщика](https://python-all.ru/2.6/faq/windows.html#id20)407408Установщик Python выдает предупреждение следующего вида:409410```python411This version uses ``CTL3D32.DLL`` which is not the correct version.412This version is used for windows NT applications only.413```414415Tim Peters:416417> Это DLL от Microsoft, известный источник проблем. Сообщение говорит именно о том, что написано: у вас неправильная версия этой DLL для вашей операционной системы. Установка Python к этому не привела – какое-то другое программное обеспечение, установленное ранее, перезаписало DLL, поставлявшуюся с вашей ОС (вероятно, старая условно-бесплатная программа, но сейчас уже не определить). Если поискать «CTL3D32» в любом поисковике (например, AltaVista), можно найти сотни веб-страниц с жалобами на ту же проблему у самых разных установочных программ. Они укажут, как восстановить правильную версию в вашей системе (поскольку Python не вызывает эту проблему, мы не можем её исправить).418419Дэвид А. Бертон написал небольшую программу для решения этой проблемы. Перейдите на [http://www.burtonsys.com/downloads.html](https://python-all.ru/2.6/faq/windows.html) и нажмите на «ctl3dfix.zip».420