FAQ Python di Windows
*********************


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 Start  ‣ Programs ‣ Python 3.x ‣ Python (command line) yang
mengakibatkan Anda melihat prompt  ">>>" 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:

1. 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 "python*NN*.dll"; itu
   biasanya dipasang di "C:\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 "python*NN*.lib", sedangkan
   penautan run-time berarti menautkan kedalam "python*NN*.dll".
   (Catatan umum: "python*NN*.lib" adalah file yang disebut dengan
   "import lib" sesuai dengan "python*NN*.dll". itu hanya
   mendefinisikan simbol untuk linker.)

   Tautan run-time sangat menyederhanakan opsi tautan; semuanya
   terjadi saat runtime. Kode anda harus dibuka "python*NN*.dll"
   dengan menggunakan Windows "LoadLibraryEx()". Kode juga harus
   menggunakan rutinitas akses dan data di "python*NN*.dll" (yaitu, C
   API Python) menggunakan pointer yang didapatkan dari Windows
   "GetProcAddress()". Makro dapat dibuat dengan menggunakan pointer
   tersebut ke kode C apapun yang memanggil rutinitas di C Python API.

   Catatan Borland: ubah "python*NN*.lib" ke format OMF menggunakan
   Coff20mf.exe terlebih dahulu.

2. 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.

3. 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.)

4. 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.

5. 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).

6. 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 Tools ‣ Options ‣ Tabs, 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.
