การจัดการ dependencies

การพัฒนา Python Packages

James Fulton

Climate informatics researcher

dependency คืออะไร?

  • แพ็กเกจอื่นที่ import ไว้ภายในแพ็กเกจของคุณ
  • ภายใน mymodule.py:
# These imported packages are dependencies
import numpy as np
import pandas as pd
...
การพัฒนา Python Packages

เพิ่ม dependencies ใน setup.py

from setuptools import setup, find_packages

setup(
    ...
    install_requires=['pandas', 'scipy', 'matplotlib'],
)
การพัฒนา Python Packages

การควบคุมเวอร์ชันของ dependency

from setuptools import setup, find_packages

setup(
    ...
    install_requires=[

'pandas>=1.0',
'scipy==1.1',
'matplotlib>=2.2.1,<3'
], )
การพัฒนา Python Packages

การควบคุมเวอร์ชันของ dependency

from setuptools import setup, find_packages

setup(
    ...
    install_requires=[

'pandas>=1.0', # good 'scipy==1.1', # bad 'matplotlib>=2.2.1,<3' # good ], )
  • อนุญาตเวอร์ชันของแพ็กเกจให้กว้างที่สุดเท่าที่เป็นไปได้
  • ลบ dependencies ที่ไม่ได้ใช้ออก
การพัฒนา Python Packages

เวอร์ชัน Python

from setuptools import setup, find_packages

setup(
    ...
    python_requires='>=2.7, !=3.0.*, !=3.1.*',
)
การพัฒนา Python Packages

การเลือกเวอร์ชันของ dependency และแพ็กเกจ

  • ตรวจสอบประวัติหรือ release notes ของแพ็กเกจ
  • ทดสอบกับเวอร์ชันต่าง ๆ

ตัวอย่าง release notes ของ NumPy

การพัฒนา Python Packages

การสร้าง environment สำหรับนักพัฒนา

pip freeze
alabaster==0.7.12
appdirs==1.4.4
argh==0.26.2
...
wrapt==1.11.2
yapf==0.29.0
zipp==3.1.0
การพัฒนา Python Packages

การสร้าง environment สำหรับนักพัฒนา

บันทึก requirements ของแพ็กเกจลงไฟล์

pip freeze > requirements.txt

ติดตั้ง requirements จากไฟล์

pip install -r requirements.txt
mysklearn/
|-- mysklearn
|   |-- __init__.py
|   |-- preprocessing
|   |   |-- __init__.py
|   |   |-- normalize.py
|   |   |-- standardize.py
|   |-- regression
|   |   |-- __init__.py
|   |   |-- regression.py
|   |-- utils.py
|-- setup.py
|-- requirements.txt   <-- developer environment
การพัฒนา Python Packages

มาฝึกกันเถอะ!

การพัฒนา Python Packages

Preparing Video For Download...