FAQ Python di Windows¶
Konten
Bagaimana cara mengoperasikan program Python di Windows?¶
Ini belum tentu pertanyaan langsung. Jika Anda sudahFamiliar dengan program yang berjalan dari Windows command line maka semuanyaAkan tampak jelas; jika tidak, Anda mungkin membutuhkan lebih banyak panduan.
Kecuali jika Anda menggunakan semacam lingkungan pengembangan terintegrasi, Anda akan berakhir dengan mengetik perintah Windows menjadi apa yang disebut sebagai "DOS window" atau "Command prompt window". Biasanya anda dapat membuat sebuah window dari bilah pencarian dengan mencari cmd
. Anda juga dapat mengenali ketika anda memulai sebuah window karena Anda akan melihat sebuah Windows "command prompt", yang mana biasanya akan tampak seperti ini:
C:\>
Suratnya mungkin berbeda, dan mungkin ada hal lain setelahnya, jadi kamu mungkin dapat dengan mudah melihat sesuatu seperti ini:
D:\YourName\Projects\Python>
tergantung pada bagaimana komputer Anda telah diatur dan apa lagi yang Anda baru saja selesai dengan itu. Setelah Anda memulai sebuah window seperti itu, Anda sudah siap menjalankan program Python.
Anda perlu menyadari bahwa skrip Python Anda harus diproses oleh orang program yang disebut dengan Python interpreter. Interpreter itu membaca skrip anda, mengkompilasinya menjadi bytecode, dan kemudian mengeksekusi bytecode untuk menjalankan program Anda. Jadi, bagaimana Anda mengatur interpreter untuk menangani PythonAnda?
Pertama, Anda perlu memastikan bahwa command window Anda mengenali kata "py" sebagai instruksi untuk memulai penerjemah. Jika Anda telah membuka command window, Anda dapat mengketik command py
dan menekan kembali:
C:\Users\YourName> py
Anda dapat melihat sesuatu tampak seperti ini:
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.
>>>
Anda telah memulai penerjemah dalam "mode interaktif". Artinya kamu bisa masuk ke dalam pernyataan atau ekspresi Python secara interaktif dan mengeksekusi atau mengevaluasi selang Anda menunggu. Ini adalah salah satu fitur terkuat Python. Periksa dengan memasukkan beberapa ekspresi pilihan Anda dan melihat hasilnya:
>>> print("Hello")
Hello
>>> "Hello" * 3
'HelloHelloHello'
Banyak orang menggunakan mode interaktif sebagai cara yang nyaman namun sangat dapat diprogram kalulator. Saat Anda ingin mengakhiri sesi Python interaktif Anda, panggil fungsi exit()
atau tahan tombol Ctrl saat anda menekan tombol Z, lalu tekan "Enter" untuk kembali ke Windows command prompt Anda.
Anda mungkin juga menemukan bahwa Anda memiliki entri Start-menu seperti >>>
di jendela baru. Jika demikian, jendela tersebut akan menghilang setelah anda memanggil fungsi exit()
atau menekan Ctrl-Z karakter; Windows menjalankan satu perintah "python" di jendela tersebut, dan tutup itu ketika anda akan mengakhiri interpreter.
Sekarang kita tahu bahwa perintah py
dikenali, Anda dapat memberikan hal tersebut ke dalam Python script. Anda harus memberikan jalur absolut atau relatif ke Python skrip tersebut. Katakanlah skrip Python Anda ada di desktop Anda dan itu bernama hello.py
. dan command prompt Anda terbuka di direktori home jadi anda dapat tampak melihat sesuatu familiar seperti:
C:\Users\YourName>
Jadi sekarang Anda akan meminta perintah py
untuk memberikan skrip Anda ke Python dengan mengetik py
yang dilanjuti dengan jalur skrip Anda:
C:\Users\YourName> py Desktop\hello.py
hello
Bagaimana cara saya membuat skrip Python dapat dieksekusi?¶
Di Windows, standar penginstal Python sudah diasosiasikan dengan .py ekstensi dengan tipe file (Python.File) dan memberikan tipe file tersebut untuk membuka command yang menjalankan interpreter (D:\Program Files\Python\python.exe "%1" %*
). Ini cukup untuk membuat skrip dapat dieksekusi dari perintah simpel dengan mengketik 'foo' tanpa ekstensi yang perlu Anda tambahkan .py di PATHEXT environment variable.
Mengapa Python terkadang membutuhkan waktu lama untuk memulai?¶
Biasanya, Python terbuka sangat cepat di Windows, tetapi terkadang ada laporan bug bahwa Python tiba-tiba mulai membutuhkan waktu lama untuk memulai. Ini menjadi lebih membingungkan karena Python akan berfungsi dengan baik pada Windows sistem yang lain yang mana secara identikal terkonfigurasi.
Masalahnya mungkin disebabkan oleh kesalahan konfigurasi perangkat lunak pemeriksaan virus di mesin masalah. Beberapa pemindai virus telah diketahui memperkenalkan overhead startup dua kali lipat saat pemindai dikonfigurasi untuk memantau semua pembacaan dari sistem file. Coba periksa konfigurasi dari perangkat lunak pemindaian virus pada sistem Anda untuk memastikan bahwa perangkat memang benar terkonfigurasi secara identik. McAfee, ketika dikonfigurasi untuk memindai semua aktivitas baca dari sistem file aktivitas, adalah pelaku tertentu.
Bagaimana cara membuat sebuah executable dari skrip Python?¶
See cx_Freeze and py2exe, both are distutils extensions that allow you to create console and GUI executables from Python code.
Apakah file *.pyd
sama dengan DLL?¶
Ya, .pyd file merupakan bagian dari dll, tapi dengan sedikit perbedaan. Jika kamu mempunyai DLL bernama foo.pyd
, kana itu pasti sebuah fungsi dari PyInit_foo()
. Anda dapat menulis Python "import foo", dan Python akan mencari untuk foo.pyd(dan juga foo.py, foo.pyc) dan jika itu ditemukan, maka akan memanggil PyInit_foo()
untuk segera diinisalisasikan. Anda tidak menautkan .exe Anda dengan foo.lib, karena hal itu akan menyebabkan Windows memerlukan DLL.
Perhatikan bahwa jalur pencarian untuk foo.pyd adalah PYTHONPATH, tidak sama dengan jalur yang digunakan Windows untuk mencari foo.dll. Selain itu, foo.pyd tidak perlu hadir untuk menjalankan program Anda, sedangkan jika Anda menautkan program Anda dengan dll, dll diperlukan. Tentu saja, foo.pyd diperlukan jika Anda ingin mengatakannya import foo
. Di file DLL, keterkaitan dideklarasikan dalam kode sumber dengan __declspec(dllexport)
. Di file .pyd, keterkaitan didefinisikan sebagai sebuah list dari fungsi yang tersedia.
Bagaimana cara memasukkan Python ke dalam aplikasi Windows?¶
Menyematkan interpreter Python di aplikasi Windows dapat diringkas menjadi sebagai:
Jangan buat Python Anda langsung ke dalam .exe. Di Windows, Python harus menjadi DLL untuk menangani modul impor yang merupakan DLL itu sendiri. (Ini adalahfakta kunci pertama yang tidak terdokumentasi.) Sebagai gantinya, tautkan ke
pythonNN.dll
; itu biasanya dipasang diC:\Windows\System
. NN adalah Python versi, angka seperti "33" untuk Python 3.3.Anda dapat menautkan ke Python dengan dua cara berbeda. Alat penautan waktu muat menautkan ke
pythonNN.lib
, sedangkan penautan run-time berarti menautkan kedalampythonNN.dll
. (Catatan umum:pythonNN.lib
adalah file yang disebut dengan "import lib" sesuai denganpythonNN.dll
. itu hanya mendefinisikan simbol untuk linker.)Tautan run-time sangat menyederhanakan opsi tautan; semuanya terjadi saat runtime. Kode anda harus dibuka
pythonNN.dll
dengan menggunakan WindowsLoadLibraryEx()
. Kode juga harus menggunakan rutinitas akses dan data dipythonNN.dll
(yaitu, C API Python) menggunakan pointer yang didapatkan dari WindowsGetProcAddress()
. Makro dapat dibuat dengan menggunakan pointer tersebut ke kode C apapun yang memanggil rutinitas di C Python API.Catatan Borland: ubah
pythonNN.lib
ke format OMF menggunakan Coff20mf.exe terlebih dahulu.Jika Anda menggunakan SWIG, mudah untuk membuat "modul ekstensi" Python dan hal itu akan membuat data di aplikasi dan metode yang tersedia ke Python. SWIG juga akan menangani tentang semua detail kumuh untuk Anda. Hasilnya adalah kode C Anda yang terkaitkan ke .exe file Anda (!) Kamu tidak perlu membuat sebuah file DLL, dan ini juga memudahkan proses linking.
SWIG akan membuat fungsi init (fungsi C) yang namanya bergantung pada nama modul ekstensi. Misalnya, jika nama modulnya adalah leo, fungsi init akan dipanggil initleo(). Jika Anda menggunakan bayangan SWIG kelas, sebagaimana seharusnya, fungsi init akan dipanggil initleoc(). Ini menginisialisasi kelas pembantu yang sebagian besar tersembunyi yang digunakan oleh kelas bayangan.
Alasan Anda dapat menautkan kode C pada langkah 2 ke file .exe Anda adalah itu memanggil fungsi inisialisasi sama dengan mengimpor modul ke dalam Python! (Ini adalah fakta kunci tak terdokumentasi kedua.)
Singkatnya, Anda dapat menggunakan kode berikut untuk menginisialisasi Python interpreter dengan ekstensi modul Anda.
#include "python.h" ... Py_Initialize(); // Initialize Python. initmyAppc(); // Initialize (import) the helper class. PyRun_SimpleString("import myApp"); // Import the shadow class.
Ada dua masalah dengan C API Python yang akan terlihat jika Andamenggunakan kompilator selain MSVC, kompilator yang digunakan untuk membangun pythonNN.dll.
Masalah 1: Yang disebut dengan "Very High Level" fungsi yang mengambil FILE * argumen tidak akan berfungsi di lingkungan multi-kompilator karena masing-masing Gagasan kompiler tentang struct FILE akan berbeda. Dari sebuah sudut pandang implementasi ini adalah fungsi level yang sangat _low_.
Masalah 2: SWIG menghasilkan kode berikut saat membuat wrappers ke dalam fungsi void:
Py_INCREF(Py_None); _resultobj = Py_None; return _resultobj;
Sayangnya, Py_None adalah makro yang meluas ke referensi ke data kompleks struktur yang disebut _Py_NoneStruct di dalam pythonNN.dll. Sekali lagi, kode ini akan gagal di lingkungan mult-compiler. Ganti kode tersebut dengan:
return Py_BuildValue("");
Dimungkinkan untuk menggunakan perintah
%typemap
SWIG untuk membuat perubahan secara otomatis, meskipun saya belum bisa membuat ini berfungsi (saya adalah pemula SWIG).Menggunakan skrip shell Python untuk memasang jendela interpreter Python di dalam aplikasi Windows Anda bukanlah ide yang bagus; jendela yang dihasilkan akan menjadi terlepas dari sistem windowing aplikasi Anda. Sebaliknya, Anda (atau wxPythonWindow) harus membuat jendela penerjemah "native". ini mudah untuk menghubungkan jendela itu ke interpreter Python. Anda dapat mengalihkan Objek i/o ke _any_ Python yang mendukung baca dan tulis, jadi semua yang Anda butuhkan adalah objek Python (didefinisikan dalam modul ekstensi Anda) yang berisi metode read() dan write().
Bagaimana cara mencegah editor memasukkan tab ke dalam sumber Python saya?¶
FAQ tidak merekomendasikan penggunaan tab, dan panduan gaya Python, PEP 8, merekomendasikan dengan 4 spasi untuk distribusi kode Python; ini juga Emacs python-mode secara default.
Di bawah editor apa pun, mencampur tab dan spasi adalah ide yang buruk. MSVC adalah berbeda dalam hal ini, dan mudah dikonfigurasi untuk menggunakan spasi: Ambil
, dan untuk file tipe "Default" set "Tab size" dan "Indent size" menjadi 4, dan pilih "Insert spaces" tombol radio.Python akan memunculkan IndentationError
atau TabError
jika terdapat gabugan antaratabs dan spasi yang menyebabkan masalah dalam spasi. Anda juga dapat menjalankan tabnanny
modul untuk mengecek sebuah direktori di mode batch.
Bagaimana cara memeriksa tombol yang ditekan tanpa memblokir?¶
Gunakan modul msvcrt. Ini adalah ekstensi khusus Windows standar modul. Ini mendefinisikan fungsi kbhit()
yang memeriksa apakah keyboard menekan, dan getch()
yang mendapat satu karakter tanpa mengulanginya.