Menggunakan library Python 2

Anda dapat menggunakan library pihak ketiga yang merupakan kode Python murni tanpa ekstensi C, dengan menyalin library ke direktori aplikasi Anda. Jika library pihak ketiga sudah merupakan bawaan, yang dipaketkan dengan runtime, Anda dapat menggunakan library tersebut tanpa menyalinnya ke aplikasi.

Library pihak ketiga harus diterapkan sebagai kode Python murni tanpa ekstensi C. Jika disalin ke direktori aplikasi, kuota file akan berkurang karena library akan diupload ke App Engine bersama dengan kode aplikasi Anda.

Menyalin library pihak ketiga

Untuk menggunakan library pihak ketiga yang tidak ada dalam daftar library bawaan yang dipaketkan dengan runtime:

  1. Buat direktori untuk menyimpan library pihak ketiga, seperti lib/.

    mkdir lib
    
  2. Gunakan pip (versi 6 atau yang lebih baru) dengan flag -t <directory> untuk menyalin library ke dalam folder yang Anda buat pada langkah sebelumnya. Contoh:

    pip install -t lib/ <library_name>
    

    Menggunakan Homebrew Python di macOS?

  3. Buat file bernama appengine_config.py di folder yang sama dengan file app.yaml Anda.

  4. Edit file appengine_config.py dan berikan direktori library Anda ke metode vendor.add().

    # appengine_config.py
    from google.appengine.ext import vendor
    
    # Add any libraries install in the "lib" folder.
    vendor.add('lib')
    

    File appengine_config.py di atas mengasumsikan bahwa direktori kerja saat ini adalah tempat folder lib berada. Dalam beberapa kasus, seperti pengujian unit, direktori kerja saat ini dapat berbeda. Untuk menghindari error, Anda dapat secara eksplisit meneruskan jalur lengkap ke folder lib menggunakan:

    vendor.add(os.path.join(os.path.dirname(os.path.realpath(__file__)), 'lib'))
    

Menggunakan file persyaratan pip dengan library yang disalin

pip dapat membaca daftar library yang akan diinstal dari file, yang dikenal sebagai file persyaratan. File persyaratan memudahkan penyiapan lingkungan pengembangan baru untuk aplikasi Anda, dan upgrade ke versi library baru.

File persyaratan adalah file teks yang berisi satu baris per library, yang mencantumkan nama paket dan, secara opsional, versi untuk paket (default-nya adalah terbaru):

Flask==0.10
Markdown==2.5.2
google-api-python-client

Untuk menginstal library dari file persyaratan, gunakan flag -r selain flag -t lib:

pip install -t lib -r requirements.txt

Menggunakan library pihak ketiga bawaan yang dipaketkan dengan runtime

Jika library pihak ketiga ada dalam daftar library bawaan yang dipaketkan dengan runtime Python App Engine, Anda hanya perlu menentukannya di perintah library di app.yaml, misalnya:

libraries:
- name: PIL
  version: "1.1.7"
- name: webob
  version: "1.1.1"

App Engine secara otomatis menyediakan library yang diminta selama deployment.

Menggunakan library paket bawaan dengan server pengembangan lokal

Banyak library bawaan yang disediakan oleh runtime tersedia secara otomatis untuk server pengembangan lokal. Untuk menginstal beberapa library secara lokal, Anda harus menjalankan gcloud components install app-engine-python-extras. Jika server pengembangan lokal mendeteksi bahwa komponen ini diperlukan, server akan meminta Anda untuk menginstalnya. Library bawaan berikut harus diinstal secara lokal sebelum Anda dapat menggunakannya dengan server pengembangan lokal:

Anda dapat menggunakan perintah pip untuk menginstal semua paket ini dari Python package index (PyPI).

sudo pip install lxml==2.3.5

Bergantung pada platform, Anda mungkin perlu menginstal alat dukungan build dan sumber Python untuk menginstal library ini.

  • Di Linux, pengelola paket dapat menyediakan prasyarat ini dan sering kali dapat menyediakan versi library siap pakai.
  • Di Windows, penginstal untuk versi siap pakai biasanya tersedia.
  • Di macOS, Alat Command Line Xcode diperlukan untuk membangun beberapa paket.

Server pengembangan menggunakan versi paket yang telah Anda instal secara lokal, terlepas dari versi yang ditentukan dalam app.yaml. Jika ingin, siapkan virtualenv untuk project Anda guna memberikan versi paket yang tepat. Perlu diperhatikan bahwa virtualenv hanya digunakan untuk paket biner ini secara lokal, dan tidak akan tersedia untuk aplikasi Anda setelah di-deploy. Untuk menambahkan library pihak ketiga lainnya, gunakan metode yang dijelaskan dalam Menginstal library.

Menggunakan Django di server pengembangan lokal

Django adalah framework aplikasi web berfitur lengkap untuk Python. Library ini menyediakan full stack komponen yang dapat dipertukarkan, termasuk komponen dispatch, tampilan, middleware, dan pembuatan template, serta banyak lainnya.

Antarmuka pemodelan data Django tidak kompatibel dengan App Engine Datastore. Anda dapat menggunakan library pemodelan data App Engine (db atau ndb) dalam aplikasi Django. Namun, aplikasi Django pihak ketiga yang menggunakan antarmuka pemodelan data Django, terutama aplikasi Admin Django, mungkin tidak berfungsi secara langsung dengan App Engine.

Library pemodelan Datastore (DB) merupakan default-nya. Untuk menggunakan Django dengan API penyimpanan NDB, tambahkan 'google.appengine.ext.ndb.django_middleware.NdbDjangoMiddleware', ke entri MIDDLEWARE_CLASSES dalam file settings.py Django Anda. Sebaiknya masukkan di depan class middleware lain karena beberapa middleware lain mungkin melakukan panggilan datastore dan itu tidak akan ditangani dengan benar jika middleware tersebut dipanggil sebelum middleware ini. Anda dapat mempelajari middleware Django lebih lanjut di dokumentasi project.

Untuk mengaktifkan Django di aplikasi Anda, tentukan aplikasi WSGI dan library Django di app.yaml:

...
handlers:
- url: /.*
  script: main.app  # a WSGI application in the main module's global scope

libraries:
- name: django
  version: "1.4"

Variabel lingkungan DJANGO_SETTINGS_MODULE harus disetel ke nama modul setelan Django Anda, biasanya 'settings', sebelum paket diimpor.

Jika modul setelan Django Anda bukan settings.py, setel variabel lingkungan DJANGO_SETTINGS_MODULE yang sesuai dalam file app.yaml Anda:

env_variables:
  DJANGO_SETTINGS_MODULE: 'myapp.settings'

Atau di kode Python Anda:

import os
# specify the name of your settings module
os.environ['DJANGO_SETTINGS_MODULE'] = 'myapp.settings'

import django.core.handlers.wsgi
app = django.core.handlers.wsgi.WSGIHandler()

Menggunakan matplotlib di server pengembangan lokal

Matplotlib adalah library plotting yang menghasilkan grafik dan angka dalam berbagai format gambar. Di App Engine, mode interaktif matplotlib tidak didukung, dan sejumlah fitur lainnya juga tidak tersedia. Artinya, Anda tidak dapat menggunakan pyplot.show() seperti yang disarankan oleh tutorial matplotlib. Sebagai gantinya, Anda harus menggunakan pyplot.savefig() untuk menulis data gambar ke aliran output, instance cStringIO.StringIO, atau Google Cloud Storage menggunakan Library Klien Cloud Storage.

Matplotlib memungkinkan penyesuaian ekstensif melalui penggunaan file konfigurasi matplotlibrc, yang harus ditempatkan dalam direktori level teratas aplikasi. Atau, Anda dapat menyetel variabel lingkungan MATPLOTLIBRC ke jalur yang terkait dengan direktori aplikasi Anda.

backend default adalah AGG, yang memungkinkan penulisan file dalam semua format yang didukung: PNG (format default), RAW, PS, PDF, SVG, dan SVGZ. Jika Anda menyediakan library PIL dengan menambahkan PIL ke bagian libraries dari app.yaml, backend AGG juga akan otomatis mendukung penulisan format gambar JPEG dan TIFF.

Matplotlib dilengkapi dengan sejumlah font yang tersedia secara otomatis. Anda dapat menggunakan font kustom dengan menguploadnya dalam format TTF bersama aplikasi Anda, dan menyetel variabel lingkungan TTFPATH ke jalur tempat font kustom tersebut berada, sesuai dengan direktori aplikasi Anda. Untuk informasi selengkapnya, lihat referensi app.yaml .

Sejumlah fitur matplotlib tidak didukung di App Engine. Pada khususnya:

  • Tidak ada direktori ~/.matplotlib. Namun, ada lokasi alternatif untuk menempatkan file konfigurasi matplotlibrc, seperti yang dijelaskan di atas.
  • Backend interaktif dan elemen GUI tidak didukung.
  • Backend EMF, Cairo, dan GDK tidak didukung.
  • Tidak ada penyimpanan dalam cache, sehingga sejumlah mekanisme akan menghitung ulang atau mendownload ulang data yang biasanya akan disimpan dalam cache. Mekanisme penyimpanan dalam cache tertentu yang telah dinonaktifkan mencakup data font yang dihitung oleh matplotlib.font_manager.FontManager.findfont, data contoh yang didownload oleh matplotlib.cbook.get_sample_data dan data keuangan yang didownload oleh matplotlib.finance.fetch_historical_yahoo.
    • Karena tidak ada penyimpanan dalam cache, [matplotlib.cbook.get_sample_data](http://matplotlib.org/api/cbook_api.html#matplotlib.cbook.get_sample_data) tidak dapat dipanggil dengan asfileobj=False kecuali jika examples.download disetel ke False.
  • Semua fitur yang memanggil perintah eksternal telah dinonaktifkan.
    • Penggunaan fontconfig telah dinonaktifkan. Font ditemukan melalui mekanisme yang dijelaskan di atas.
    • Penggunaan LaTeX untuk rendering teks tidak didukung. Menyetel text.usetex ke True tidak akan berfungsi.
    • Penggunaan program penyaring PostScript eksternal tidak didukung. Menyetel ps.usedistiller ke ghostscript atau xpdf tidak akan berfungsi.
    • Penggunaan program encoding video eksternal tidak didukung. Metode matplotlib.animation.Animation.save tidak akan berfungsi, sehingga paket matplotlib.animation tidak berguna.
    • Fungsi matplotlib.cbook.report_memory dan class matplotlib.cbook.MemoryMonitor tidak didukung.
  • Fungsi matplotlib.test telah dinonaktifkan.

Langkah selanjutnya