Projektstruktur och pyproject.toml
Strukturera ett paket
Projektstruktur och pyproject.toml är en gratis lektion i Python Academy på CoddyKit. Detta är lektion 1 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Python Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Python Academy innehåller totalt 4 lektioner.
Varför paketera koden
Ett skript finns på din dator, medan ett paket kan installeras av vem som helst med pip install. Paketering förvandlar en kodmapp till en distribuerbar, versionshanterad och återanvändbar enhet.
Det första steget är en ren projektstruktur och en konfigurationsfil.
src-layouten
Den rekommenderade strukturen placerar den importerbara koden i en katalog med namnet src/:
src/mypackage/__init__.pysrc/mypackage/core.pypyproject.tomlREADME.mdochtests/
src-layouten förhindrar att du råkar importera koden från projektroten i stället för den installerade kopian.
Filen __init__.py
__init__.py markerar en katalog som ett importerbart paket och körs första gången paketet importeras. Här kan du också exponera det offentliga API:t genom att importera viktiga namn.
Även en tom __init__.py räcker för att skapa ett paket.
package_dir = 'src/mypackage'
files = ['__init__.py', 'core.py', 'utils.py']
for f in files:
print(package_dir + '/' + f)
print('Importable as:', 'mypackage')Vad pyproject.toml är
pyproject.toml är den enda standardiserade konfigurationsfilen (PEP 518/621) för modern Python-paketering. Den ersätter setup.py i de flesta projekt och läses av byggverktyg.
Filen använder TOML-formatet: avsnitt inom hakparenteser och rader med nyckel = värde.
Tabellen build-system
Tabellen [build-system] talar om för verktygen hur paketet ska byggas. Ett vanligt val är:
requires = ['setuptools', 'wheel']build-backend = 'setuptools.build_meta'
Andra byggbackend-alternativ är Hatchling och Flit; grundidén är densamma.
Tabellen project
Tabellen [project] innehåller metadata: name, version, description, authors, readme, requires-python och dependencies. Det är detta som användarna ser på PyPI.
Tänk på den som paketets identitetskort.
project = {
'name': 'mytool',
'version': '0.1.0',
'requires-python': '>=3.9',
'dependencies': ['requests>=2.0'],
}
for k, v in project.items():
print(k, '=', v)Namngivningsregler
Paketnamnet måste vara unikt på PyPI och följer normaliseringsregler: det är skiftlägesokänsligt och bindestreck och understreck behandlas likadant. Kontrollera att namnet är ledigt innan du bestämmer dig, så att du undviker en namnkonflikt vid uppladdningen.
name = 'My_Cool.Tool'
normalized = name.lower().replace('_', '-').replace('.', '-')
print('PyPI normalized name:', normalized)Deklarera beroenden
Lista körtidsberoenden under dependencies med versionsbegränsningar som 'requests>=2.28,<3'. Valfria extrafunktioner anges under [project.optional-dependencies] och kan installeras med pip install mytool[dev].
Håll begränsningarna så lösa som är säkert, så att paketet kan samexistera med andra.
Entry points
Om du vill distribuera ett kommandoradsverktyg lägger du till en post under [project.scripts], till exempel mytool = 'mypackage.cli:main'. Efter installationen körs den funktionen när du skriver mytool. Det är så CLI:er som black och pytest exponerar sina kommandon.
Inkludera filer som inte är kod
Datafiler (mallar, JSON) inkluderas inte automatiskt. Konfigurera paketdata i din build backend så att filerna följer med i wheel-filen. Att glömma detta är en vanlig orsak till fel av typen ”fungerar lokalt men går sönder vid installation”.
Redigerbara installationer under utveckling
Under utvecklingen installerar du paketet i redigerbart läge med pip install -e .. Ändringar i källkoden börjar gälla omedelbart utan att du behöver installera om paketet. Detta förutsätter en korrekt pyproject.toml, vilket är ännu en anledning att konfigurera den tidigt.
Redigerbara installationer ger den snabbaste återkopplingen när du itererar på ett paket.
Snabbtest
Testa dina kunskaper om projektstrukturer.
Sammanfattning
Du har strukturerat ett paket:
- Använd src-layouten där
__init__.pymarkerar paketen pyproject.tomlär standardkonfigurationen med[build-system]och[project]- Deklarera
name,version,requires-pythonochdependencies - Lägg till entry points under
[project.scripts]för CLI:er och konfigurera paketdata
Lär dig Python med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 76
- Lektioner
- 320
Vanliga frågor
Är lektionen ”Projektstruktur och pyproject.toml” gratis?
Ja – hela texten till ”Projektstruktur och pyproject.toml” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Python Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i Python Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Projektstruktur och pyproject.toml”?
Strukturera ett paket Ni övar på Python Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Python Academy?
Du behöver inga förkunskaper. Utbildningen i Python Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 1 av 4.
Hur lång tid tar lektionen ”Projektstruktur och pyproject.toml”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Python Academy-lektionen?
Ja. Varje Python Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Projektstruktur och pyproject.toml
- Bygga med build
- Versionshantering och metadata
- Publicera med twine