Module Directory Structure

In this tutorial, we will cover the process of transitioning your code from Jupyter notebooks to a structured Python module. The focus will be on creating a module named “gcpds” with a chosen submodule.

Structuring Your Module

Your module structure should follow this pattern:

gcpds/
└── submodule/
├── init.py
├── optional_file_1.py
└── optional_file_2.py

Using __init__.py

The __init__.py file is suitable for simpler submodules.

Example: Simple Class in ``__init__.py``

Suppose you have a basic class SimpleClass in your Jupyter notebook. Here’s how to include it in __init__.py:

# gcpds/submodule/__init__.py

class SimpleClass:
    def __init__(self):
        self.message = "Hello from SimpleClass"

    def greet(self):
        return self.message

Importing from ``__init__.py``

To use SimpleClass in your script:

from gcpds.submodule import SimpleClass

simple_obj = SimpleClass()
print(simple_obj.greet())  # Outputs: Hello from SimpleClass

Using optional_file_1.py

For more complex functionalities, additional files like optional_file_1.py are used.

Example: Class in ``optional_file_1.py``

Imagine you have a more complex class, ComplexClass, in your Jupyter notebook. Here’s how to include it in optional_file_1.py:

# gcpds/submodule/optional_file_1.py

class ComplexClass:
    def __init__(self, param):
        self.param = param

    def complex_method(self):
        # Complex implementation
        return f"Complex output with {self.param}"

Importing from ``optional_file_1.py``

To use ComplexClass in your script:

from gcpds.submodule.optional_file_1 import ComplexClass

complex_obj = ComplexClass("parameter")
print(complex_obj.complex_method())  # Outputs: Complex output with parameter