\[ [Index](index.md) | [Exercise 9.1](ex9_1.md) | [Exercise 9.3](ex9_3.md) \] # Exercise 9.2 *Objectives:* - Learn how to create a Python package **Note** This exercise mostly just involves copying files on the file system. There shouldn't be a lot of coding. ## (a) Making a Package In previous exercises, you created the following files that were related to type-checked structures, reading data, and making tables: - `structure.py` - `validate.py` - `reader.py` - `tableformat.py` Your task is to take all of these files and move them into a package called `structly`. To do that, follow these steps: - Make a directory called `structly` - Make an empty file `__init__.py` and put it in the `structly` directory - Move the files `structure.py`, `validate.py`, `reader.py`, and `tableformat.py` into the `structly` directory. - Fix any import statements between modules (specifically, the `structure` module depends on `validate`). Once you've done that, modify the `stock.py` program so that it looks exactly like this and that it works: ```python # stock.py from structly.structure import Structure class Stock(Structure): name = String() shares = PositiveInteger() price = PositiveFloat() @property def cost(self): return self.shares * self.price def sell(self, nshares: PositiveInteger): self.shares -= nshares if __name__ == '__main__': from structly.reader import read_csv_as_instances from structly.tableformat import create_formatter, print_table portfolio = read_csv_as_instances('Data/portfolio.csv', Stock) formatter = create_formatter('text') print_table(portfolio, ['name','shares','price'], formatter) ``` \[ [Solution](soln9_2.md) | [Index](index.md) | [Exercise 9.1](ex9_1.md) | [Exercise 9.3](ex9_3.md) \] ---- `>>>` Advanced Python Mastery `...` A course by [dabeaz](https://www.dabeaz.com) `...` Copyright 2007-2023 ![](https://i.creativecommons.org/l/by-sa/4.0/88x31.png). This work is licensed under a [Creative Commons Attribution-ShareAlike 4.0 International License](http://creativecommons.org/licenses/by-sa/4.0/)