Windows äžã® Python FAQ¶
Python ããã°ã©ã ã Windows ã§åããã«ã¯ã©ãããŸããïŒÂ¶
ããã¯å¿ ãããåçŽãªè³ªåã§ã¯ãããŸãããWindows ã³ãã³ãã©ã€ã³ããããã°ã©ã ãå®è¡ããã®ã«æ £ããŠããŸã£ãŠããå Žåã¯ãå šãŠæãããªããšã«æããã§ããã; ããã§ãªãå Žåã¯ãããå°ãæåŒããå¿ èŠã§ãããã
ããçš®ã®çµ±åéçºç°å¢ã䜿ã£ãŠããã®ã§ãªããã°ãæçµçã«ã¯ "ã³ãã³ãããã³ãã" ãªã©ãšåŒã°ããŠãããã®ã«ã Windows ã³ãã³ããã¿ã€ãããããšã«ãªãã§ãããã
éåžžãããããŠã£ã³ããŠã¯æ€çŽ¢ããŒã§ cmd ãæ€çŽ¢ããŠèµ·åããŸãã
éåžžã¯æ¬¡ã®ãããªèŠãç®ã® Windows ã® "ã³ãã³ã ããã³ãã" ãçŸããã®ã§ããŠã£ã³ããŠãèµ·åããã®ãåããã¯ãã§ã:
C:\>
ãã®æåã¯ç°ãªã£ãŠããããç¶ãããã£ããããã®ã§ãã³ã³ãã¥ãŒã¿ã®èšå®ããããªããæè¿äœããããã«äŸã£ãŠããã®ããã«ãªã£ãŠããããšãããã§ããã:
D:\YourName\Projects\Python>
ãã®ãããªãŠã£ã³ããŠããéãã°ãPython ããã°ã©ã ãåããæé ã¯é 調ã«é²ã¿ãŸãã
Python ã¹ã¯ãªãã㯠Python ã€ã³ã¿ããªã¿ ãšåŒã°ããå¥ã®ããã°ã©ã ã§åŠçãããªããã°ãªããªããšããããšããçè§£ããå¿ èŠããããŸããã€ã³ã¿ããªã¿ã¯ã¹ã¯ãªãããèªã¿èŸŒã¿ããã€ãã³ãŒãã«ã³ã³ãã€ã«ãããã€ãã³ãŒããå®è¡ãããã°ã©ã ãèµ°ãããŸããã§ã¯ãã€ã³ã¿ããªã¿ã Python ã¹ã¯ãªãããåãæ±ãããã«ã¯ãã©ããªçšæãããã®ã§ãããã?
ãŸãæåã«ãã³ãã³ããŠã£ã³ããŠã« "py" ãšããåèªãã€ã³ã¿ããªã¿ãèµ·åããæç€ºã§ãããšèªèãããå¿
èŠããããŸãã
ã³ãã³ããŠã£ã³ããŠãéãããã py ãšããã³ãã³ããå
¥åãããªã¿ãŒã³ããŒãå©ããŠãã ããã:
C:\Users\YourName> py
次ã®ãããªåºåãèŠããã§ããã:
Python 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:04:45) [MSC v.1900 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
ã€ã³ã¿ããªã¿ã®"察話ã¢ãŒã"ãå§ãŸããŸãããããã§ Python ã®æãåŒã察話çã«å ¥åããŠãåŸ ã£ãŠããéã«å®è¡ãè©äŸ¡ãããããšãã§ããŸããããã Python ã®æåŒ·ã®æ©èœã®ã²ãšã€ã§ããããã€ãã®åŒãéžãã§å ¥åããçµæãèŠãŠç¢ºãããŠã¿ãŸããã:
>>> print("Hello")
Hello
>>> "Hello" * 3
'HelloHelloHello'
å€ãã®äººã察話ã¢ãŒãã䟿å©ã§é«åºŠãªããã°ã©ã å¯èœèšç®æ©ãšããŠäœ¿ã£ãŠããŸããå¯Ÿè©±åŒ Python ã»ãã·ã§ã³ãçµããããããªãã exit() 颿°ãåŒã³åºããã Ctrl ããŒãæŒããªãã Z ãå
¥åã "Enter" ããŒãæŒããŠã Windows ã³ãã³ãããã³ããã«æ»ã£ãŠãã ããã
ã®ãããªé
ç®ãã¹ã¿ãŒãã¡ãã¥ãŒã«èŠä»ãããããããŸããã
ãããèµ·åãããšãæ°ãããŠã£ã³ããŠã« >>> ãšããããã³ãããèŠãããã§ãããããã®å Žåã exit() 颿°ãåŒã³åºãã Ctrl-Z ãå
¥åãããšãŠã£ã³ããŠã¯éããŸã; Windows 㯠1 ã€ã® "python" ã³ãã³ãããŠã£ã³ããŠã§å®è¡ããŠããŠãã€ã³ã¿ããªã¿ãçµäºããããšãã«ããã®ãŠã£ã³ããŠãéããŸãã
py ã³ãã³ããèªèãããŠããããšã確èªã§ããã®ã§ã Python ã¹ã¯ãªãããäžããããããã«ãªããŸããã
ãã®ããã«ã¯ Python ã¹ã¯ãªããã®çµ¶å¯Ÿãã¹ãããã¯çžå¯Ÿãã¹ãäžããå¿
èŠããããŸãã
Python ã¹ã¯ãªããããã¹ã¯ãããã«ããã hellp.py ãšããååã§ãã¡ããã©è¯ãããšã«ã³ãã³ãããã³ãããããŒã ãã£ã¬ã¯ããªãéããŠãããšä»®å®ããŸãããããããããšæ¬¡ã®ãããªè¡šç€ºãèŠãããŸã:
C:\Users\YourName>
ãããŸã§æ¥ãã° py ã®åŸãã«ã¹ã¯ãªããã®ãã¹ãå
¥åããããšã§ã Python ã«ã¹ã¯ãªãããæž¡ããã py ã³ãã³ãã«åœä»€ã§ããŸã:
C:\Users\YourName> py Desktop\hello.py
hello
Python ã¹ã¯ãªãããå®è¡å¯èœã«ããã«ã¯ã©ãããŸããïŒÂ¶
Windows ã§ã¯ãæšæºã® Python ã€ã³ã¹ããŒã©ã¯ãã§ã« .py æ¡åŒµåããããã¡ã€ã«å (Python.File) ã«é¢é£ä»ãããã®ãã¡ã€ã«åã«ã€ã³ã¿ããªã¿ãå®è¡ãããªãŒãã³ã³ãã³ã (D:\Program Files\Python\python.exe "%1" %*) ãäžããŸããã³ãã³ãããã³ãããã 'foo.py' ãšããŠã¹ã¯ãªãããå®è¡å¯èœã«ããã«ã¯ããã§ååã§ããã¹ã¯ãªãããæ¡åŒµåãªãã§ 'foo' ãšã ãã¿ã€ãããŠå®è¡ãããã®ãªããPATHEXT ç°å¢å€æ°ã« .py ãå ããŠãã ããã
Python ã®èµ·åã«æéããããããšãããã®ã¯ãªãã§ããïŒÂ¶
éåžž Python 㯠Windows ã§ãšãŠãæ©ãèµ·åããŸããããšãã©ã Python ãæ¥ã«ã¹ã¿ãŒãã¢ããã«æéããããããã«ãªã£ããšãããã°ã¬ããŒãããããŸããæŽã«è€éãªããšã«ãPython ã¯åæ§ã«èšå®ãããä»ã® Windows ã·ã¹ãã ã§ã¯ãã¡ããšåãã®ã§ãã
ãã®åé¡ã¯ãã®ãã·ã³ã®ãŠã€ã«ã¹å¯ŸçãœãããŠã§ã¢ã®èšå®ãã¹ã«ãã£ãŠèµ·ããããããšããããŸãããŠã€ã«ã¹ã¹ãã£ãã®äžã«ã¯ããã¡ã€ã«ã·ã¹ãã ããã®å šãŠã®èªã¿èŸŒã¿ãç£èŠããããã«èšå®ããå Žåã«ãäºæ¡ã®ã¹ã¿ãŒãã¢ãããªãŒããŒããããåŒãèµ·ãããšãç¥ãããŠãããã®ããããŸããããªãã®ã·ã¹ãã ã®ãŠã€ã«ã¹ã¹ãã£ã³ãœãããŠã§ã¢ã®èšå®ã確ãããŠãæ¬åœã«åæ§ã«èšå®ãããŠããããšã確å®ã«ããŠãã ããã
ã©ãããã° Python ã¹ã¯ãªããã EXE ã«åºæ¥ãŸãã?¶
å®è¡å¯èœãã¡ã€ã«ãäœããããŒã«ã®äžèЧ ã©ãããã Python ã¹ã¯ãªããããã¹ã¿ã³ãã¢ãã³ãã€ããªãäœããŸããïŒ ãåç §ããŠãã ããã
*.pyd ãã¡ã€ã«ã¯ DLL ãšåãã§ããïŒÂ¶
ã¯ãã.pyd ãã¡ã€ã«ã¯ dll ãšåããããªãã®ã§ãããå°ãéãããããŸããfoo.pyd ãšããååã® DLL ããã£ããšããããããã«ã¯é¢æ° PyInit_foo() ãå«ãŸããŠããªããã°ãªããŸãããããããã° Python ã§ "import foo" ãæžããŠãPython 㯠foo.pyd (ã foo.pyãfoo.pyc) ãæ¢ããŠãããã°ãPyInit_foo() ãåŒã³åºããŠåæåããããšããŸããWindows ã DLL ã®ååšãå¿
èŠãšããã®ãšéãã.exe ãã¡ã€ã«ã foo.lib ã«ãªã³ã¯ããããã§ã¯ãããŸããã
ãªããfoo.pyd ãæ€çŽ¢ãããã¹ã¯ PYTHONPATH ã§ãããWindows ã foo.dll ãæ€çŽ¢ãããã¹ãšåãã§ã¯ãããŸããããŸããããã°ã©ã ã dll ã«ãªã³ã¯ãããšãã¯ããã°ã©ã ã®å®è¡ã« dll ãå¿
èŠã§ãããfoo.pyd ã¯å®è¡ã«ã¯å¿
èŠã¯ãããŸããããã¡ããã import foo ããããªã foo.pyd ã¯å¿
èŠã§ããDLL ã§ã¯ããªã³ã¯ã¯ãœãŒã¹ã³ãŒãå
ã§ __declspec(dllexport) ã«ãã£ãŠå®£èšãããŸãã.pyd ã§ã¯ããªã³ã¯ã¯äœ¿ãã颿°ã®ãªã¹ãã§å®çŸ©ãããŸãã
Python ã Windows ã¢ããªã±ãŒã·ã§ã³ã«åã蟌ãã«ã¯ã©ããããããã§ããïŒÂ¶
Python ã€ã³ã¿ããªã¿ã Windows app ã«åãèŸŒãæ¹æ³ã¯ã次ã®ããã«èŠçŽã§ããŸã:
ããªãã® .exe å ã«çŽæ¥ Python ãåã蟌ãã§ãã«ã ããªãã§ äžãããWindows ã§ã¯ãããèªèº«ã DLL ã«ãªã£ãŠãããããªã¢ãžã¥ãŒã«ã®ã€ã³ããŒããåŠçããããã«ãPython 㯠DLL ã§ãªããã°ãªããŸããã(ããã¥ã¡ã³ãåãããŠããªãé倧ãªäºå®ã®äžã€ç®ã§ãã)代ããã«ã
pythonNN.dllãšãªã³ã¯ããŠãã ãã; æ®éã¯ããã¯C:\Windows\Systemã«ã€ã³ã¹ããŒã«ãããŠããŸãã NN 㯠Python ããŒãžã§ã³ã§ Python 3.3 ã§ããã° "33" ã®ãããªæ°åã§ããPython ã«ã¯ãload-time ã«ããŸã㯠run-time ã«ãªã³ã¯ã§ããŸããload-time ãªãªã³ã¯ã¯ã
pythonNN.libã«å¯ŸããŠãªã³ã¯ãããã®ã§ãrun-time ãªãªã³ã¯ã¯pythonNN.dllã«å¯ŸããŠãªã³ã¯ãããã®ã§ãã(äžè¬çãªæ³šæ:pythonNN.libã¯pythonNN.dllã«å¯Ÿãããããã "ã€ã³ããŒãã©ã€ãã©ãª" ã§ããããã¯åã«ãªã³ã«ã«å¯Ÿããã·ã³ãã«ãå®çŸ©ããŸãã)run-time ãªãªã³ã¯ã¯ããªã³ã¯ã®éžæã倧ãã«åçŽåããŸããå šãŠã¯å®è¡æã«è¡ãããŸããã³ãŒã㯠Windows ã®
LoadLibraryEx()ã«ãŒãã³ã§pythonNN.dllãããŒãããªããã°ãªããŸãããã³ãŒãã¯ãŸããWindows ã®GetProcAddress()ã«ãŒãã³ã§åŸããããã€ã³ã¿ã§ãpythonNN.dll(ããªãã¡ãPython ã® C API)ã®ã«ãŒãã³ãšããŒã¿ãžã¢ã¯ã»ã¹ããŠããªããã°ãªããŸããããã¯ãã«ãã£ãŠããã®ãã€ã³ã¿ã Python ã® C API ã®ã«ãŒãã³ãåŒã³åºãä»»æã® C ã³ãŒãã«éããŠäœ¿ããŸããSWIG ã䜿ãã°ãapp ã®ããŒã¿ãšã¡ãœããã Python ã§äœ¿ããããã«ãã Python "æ¡åŒµã¢ãžã¥ãŒã«"ãç°¡åã«äœããŸããSWIG ã¯éçšãæ®ã©ãã£ãŠãããã§ããããçµæãšããŠã.exe ãã¡ã€ã« ã®äžã« ãªã³ã¯ãã C ã³ãŒããã§ããŸã(ïŒ)ãDLL ãäœ ããªããŠãããããªã³ã¯ãç°¡æœã«ãªããŸãã
SWIG ã¯æ¡åŒµã®ååã«äŸãååã® init 颿° (C 颿°) ãäœããŸããäŸãã°ãã¢ãžã¥ãŒã«ã®ååã leo ãªããinit 颿°ã®åå㯠initleo() ã«ãªããŸããSWIG shadow ã¯ã©ã¹ã䜿ã£ãã»ããããããããããš init 颿°ã®åå㯠initleoc() ã«ãªããŸãããã㯠shadow ã¯ã©ã¹ã䜿ãã»ãšãã©é ãã helper ã¯ã©ã¹ãåæåããŸãã
ã¹ããã 2 ã® C ã³ãŒãã .exe ãã¡ã€ã«ã«ãªã³ã¯ã§ããã®ã¯ãåæå颿°ã®åŒã³åºããš Python ãžã®ã¢ãžã¥ãŒã«ã®ã€ã³ããŒããåçã ããã§ãïŒ (ããã¥ã¡ã³ãåãããŠããªãé倧ãªäºå®ã®äºã€ç®ã§ã)
èŠããã«ã以äžã®ã³ãŒãã䜿ã£ãŠ Python ã€ã³ã¿ããªã¿ãæ¡åŒµã¢ãžã¥ãŒã«èŸŒã¿ã§åæåããããšãã§ããŸãã
#include <Python.h> ... Py_Initialize(); // Pythonã®åæå initmyAppc(); // ãã«ããŒclassã®åæå(import) PyRun_SimpleString("import myApp"); // shadowã¯ã©ã¹ã®import
Python ã® C API ã«ã¯ãpythonNN.dll ããã«ãããã®ã«äœ¿ãããã³ã³ãã€ã© MSVC 以å€ã®ã³ã³ãã€ã©ã䜿ããšçŸããäºã€ã®åé¡ããããŸãã
åé¡ 1: ã³ã³ãã€ã©ã«ãã£ãŠ
struct FILEã«å¯ŸããæŠå¿µãç°ãªããããFILE *åŒæ°ãåããããã "è¶ é«æ°Žæº" 颿°ã¯ãå€ã³ã³ãã€ã©ç°å¢ã§åããŸãããå®è£ ã®èгç¹ããããããã¯è¶ äœæ°Žæºé¢æ°ã«ãªã£ãŠããŸããåé¡ 2: SWIG 㯠void 颿°ãžã®ã©ãããçæãããšãã«ä»¥äžã®ã³ãŒããçæããŸã:
Py_INCREF(Py_None); _resultobj = Py_None; return _resultobj;
ãããPy_none 㯠pythonNN.dll å ã® _Py_NoneStruct ãšããè€éãªããŒã¿æ§é ã«å±éãããã¯ãã§ãããŸãããã®ã³ãŒãã¯ä»ã³ã³ãã€ã©ç°å¢ã§ã¯å€±æããŸãããã®ã³ãŒããæ¬¡ã®ããã«çœ®ãæããŠãã ãã:
return Py_BuildValue("");
ããã§ãSWIG ããŸã ä»äºã«äœ¿ããªã (ç§ã¯ SWIG ã®å®å šãªåå¿è ã§ã) ç§ã§ããSWIG ã®
%typemapã³ãã³ãã䜿ã£ãŠèªåçã«å€æŽã§ããããã«ãªããŸããPython ã·ã§ã«ã¹ã¯ãªããã䜿ã£ãŠ Windows app å ãã Python ã€ã³ã¿ããªã¿ãŠã£ã³ããŠãæ²ç€ºããã®ã¯ããæ¹æ³ã§ã¯ãããŸããããã®ããã«è¡šç€ºããããŠã£ã³ããŠã¯ app ã®ãŠã£ã³ããŠã·ã¹ãã ãšã¯é¢ä¿ãããŸãããããã "ãã€ãã£ããª" ã€ã³ã¿ããªã¿ãŠã£ã³ããŠã (wxPythonWindow ã䜿ã£ããããŠ) äœãã¹ãã§ãããã®ãŠã£ã³ããŠã Python ã€ã³ã¿ããªã¿ã«ã€ãªãã®ã¯ç°¡åã§ããPython ã® i/o ã¯èªã¿æžãããµããŒããã _ã©ããª_ ãªããžã§ã¯ãã«ããªãã€ã¬ã¯ãã§ããã®ã§ãread() ãš write() ã¡ãœãããå«ã (æ¡åŒµã¢ãžã¥ãŒã«ã§å®çŸ©ããã) Python ãªããžã§ã¯ãããããã°ããã®ã§ãã
ãšãã£ã¿ã Python ãœãŒã¹ã«ã¿ããåæã«æ¿å ¥ããªãããã«ããã«ã¯ã©ãããŸããïŒÂ¶
ãã® FAQ ã§ã¯ã¿ãã䜿ãããšãå§ããŸãããPython ã¹ã¿ã€ã«ã¬ã€ã PEP 8 ã§ã¯ãé åžããã Python ã³ãŒãã«ã¯ã¹ããŒã¹ 4 ã€ã䜿ãããšãæšå¥šããŠããŸãããã㯠Emacs ã® python-mode ã®ããã©ã«ãã§ãåãã§ãã
ãããªããšãã£ã¿ã§ããã¿ããšã¹ããŒã¹ãæ··ããã®ã¯è¯ããªãã§ãã MSVC ãå šãåãç«å Žã§ãããã¹ããŒã¹ã䜿ãããã«ããèšå®ãç°¡åã«ã§ããŸãã ãéžæãããã¡ã€ã«ã¿ã€ãã® "ããã©ã«ã" ã® "ã¿ãå¹ " ãš "ã€ã³ãã³ãå¹ " ã« 4 ãèšå®ããŠã "ã¹ããŒã¹ãæ¿å ¥ãã" ã®ã©ãžãªãã¿ã³ãéžæããŠãã ããã
Python ã¯ãããã¿ããšã¹ããŒã¹ãæ··åšããŠããããšã§å
é ã®ç©ºçœã«åé¡ãããå ŽåãIndentationError ãŸã㯠TabError ãéåºããŸãã
tabnanny ã¢ãžã¥ãŒã«ãå®è¡ããããšã§ããã£ã¬ã¯ããªãŒããªãŒããããã¢ãŒãã§ãã§ãã¯ããããšãã§ããŸãã
ãããã¯ããããšãªãæŒéµãæ€åºããã«ã¯ã©ãããŸããïŒÂ¶
msvcrt ã¢ãžã¥ãŒã«ã䜿ã£ãŠãã ãããããã¯æšæºã® Windows å°çšæ¡åŒµã¢ãžã¥ãŒã«ã§ããããã¯ããŒããŒããæãããŠãããã調ã¹ã颿° kbhit() ãšãåé¿ããããšãªãäžæåãåŸã getch() ãå®çŸ©ããŸãã
missing api-ms-win-crt-runtime-l1-1-0.dll ãšã©ãŒã解決ããã«ã¯ã©ãããŸããïŒÂ¶
ãã®åé¡ã¯æŽæ°ãã€ã³ã¹ããŒã«ãããŠããªã Windows 8.1 以åã䜿ã£ãŠãããš Python 3.5 以éã§çºçããããšããããŸãããŸãã¯ããªãã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ããµããŒããããŠããææ°ã§ããããšã確èªããŠãã ãããããã§ã解決ããªãå Žåã¯ã C ã©ã³ã¿ã€ã ã¢ããããŒãã®æåã€ã³ã¹ããŒã«æ¹æ³ã«ã€ã㊠Microsoft support page ãåç §ããŠãã ããã