- Compile - basics of how to compile and execute a basic program and other common tools
- Modules - how to create a reusable module in the local project. How to mange exports and imports into a consuming module.
- Import Package - how add an external package to a program and import it. How to upgrade to new revisions and lock to a specific version.
- Publish a Package - how to author and publish a package for external consumption
- Tests - how to add tests to a package that can be run as part of CI/CD
- Custom Tools - how to incorporate custom tools as part of the build process (e.g. openapi code generation)
Package Deployment
Change TopicPython Package and Deploy
TypeScript Package and Deploy
Compile
Compiling and Executing a Basic Program. Python is an interpreted language, so compilation is typically implicit. However, Python does support bytecode compilation.
python script.py # Run a Python script python -m compileall script.py # Generate .pyc bytecode file
Some common tools:
pyinstaller
: Package Python scripts into standalone executables.cython
: Compile Python code to C for performance improvements.
Example of creating an executable:
pip install pyinstaller pyinstaller --onefile script.py
Compile
To compile a TypeScript program, install the TypeScript compiler:
npm install -g typescript
Create a simple index.ts
file:
const message: string = "Hello, TypeScript!"; console.log(message);
Compile the file:
tsc index.ts
This generates an index.js
file that can be executed with Node.js:
node index.js
Modules
To creating a reusable module: - a module is a .py
file containing functions, classes, or variables that can be imported elsewhere.
Example: mymodule.py
def greet(name): return f"Hello, {name}!"
To use it in another script:
import mymodule print(mymodule.greet("Alice"))
Managing Exports: - to control what gets exported:
__all__ = ["greet"]
Modules
Create a module in math.ts
:
export function add(a: number, b: number): number { return a + b; }
Consume it in index.ts
:
import { add } from "./math"; console.log(add(2, 3));
Compile and run:
tsc && node index.js
Import Package
Installing External Packages
Python uses pip
to install external packages.
pip install requests # Install package pip list # List installed packages pip show requests # Show package details
Upgrading and Version Locking:
pip install --upgrade requests # Upgrade to latest pip install requests==2.25.1 # Install a specific version pip freeze > requirements.txt # Lock dependencies pip install -r requirements.txt # Install from lock file
Import Package
To add an external package, use npm:
npm install lodash
Import and use it in index.ts
:
import _ from "lodash"; console.log(_.capitalize("hello world"));
Lock to a specific version:
npm install lodash@4.17.21
Upgrade a package:
npm update lodash
Publish a Package
Creating a Package
Structure:
my_package/ ├── mymodule.py ├── __init__.py ├── setup.py
setup.py
Example:
from setuptools import setup setup( name='my_package', version='0.1', packages=['my_package'], install_requires=[], )
Publishing to PyPI
pip install twine python setup.py sdist bdist_wheel python -m twine upload dist/*
Publish a Package
-
Initialize a package:
npm init -y
-
Add TypeScript support:
npm install typescript --save-dev
-
Write a module in
index.ts
:export function greet(name: string): string { return `Hello, ${name}!`; }
-
Configure
package.json
:"main": "dist/index.js", "types": "dist/index.d.ts",
-
Publish:
npm login npm publish
Tests
Adding Tests
Using unittest
:
import unittest from mymodule import greet class TestGreet(unittest.TestCase): def test_greet(self): self.assertEqual(greet("Alice"), "Hello, Alice!") if __name__ == "__main__": unittest.main()
Running tests:
python -m unittest discover
For CI/CD:
pytest --junitxml=results.xml
Tests
Install a test framework:
npm install --save-dev jest @types/jest ts-jest
Configure Jest in jest.config.js
:
module.exports = { preset: "ts-jest", testEnvironment: "node", };
Create math.test.ts
:
import { add } from "./math"; test("adds 1 + 2 to equal 3", () => { expect(add(1, 2)).toBe(3); });
Run tests:
npm test
Custom Tools
Integrating Code Generation (OpenAPI Example)
pip install openapi-generator-cli openapi-generator-cli generate -i api.yaml -g python -o generated_client
Custom Build Commands in setup.py
from setuptools import setup from setuptools.command.build_py import build_py class CustomBuild(build_py): def run(self): print("Running custom build step...") build_py.run(self) setup( name='my_package', version='0.1', cmdclass={'build_py': CustomBuild} )
Executing:
python setup.py build
Custom Tools
Example: OpenAPI code generation
-
Install OpenAPI generator:
npm install @openapitools/openapi-generator-cli -g
-
Generate TypeScript client:
openapi-generator-cli generate -i openapi.yaml -g typescript-fetch -o generated-client
-
Use it in a project:
import { ApiClient } from "./generated-client"; const client = new ApiClient();