[Tutor] module import from a packager works inconsistent between REPL and command line
Arup Rakshit
ar at zeit.io
Thu Apr 25 08:10:18 EDT 2019
I have a small app like this:
pizza-shop$ tree .
.
└── pizzapy
├── __init__.py
├── menu.py
└── pizza.py
1 directory, 3 files
# menu.py
from typing import List
from pizza import Pizza
MENU: List[Pizza] = [
Pizza('Margherita', 30, 10.0),
Pizza('Carbonara', 45, 14.99),
Pizza('Marinara', 35, 16.99),
]
if __name__ == '__main__':
print(MENU)
# pizza.py
import math
class Pizza:
name: str = ''
size: int = 0
price: float = 0
def __init__(self, name: str, size: int, price: float) -> None:
self.name = name
self.size = size
self.price = price
def area(self) -> float:
return math.pi * math.pow(self.size / 2, 2)
def awesomeness(self) -> int:
if self.name == 'Carbonara':
return 9000
return self.size // int(self.price) * 100
print('pizza.py module name is %s' % __name__)
if __name__ == '__main__':
print('Carbonara is the most awesome pizza.')
Now when I call the menu.py from command like it works as expected.
pizza-shop$ python3 pizzapy/menu.py
pizza.py module name is pizza
[<pizza.Pizza object at 0x1035dbeb8>, <pizza.Pizza object at 0x1035fb2b0>, <pizza.Pizza object at 0x1036b6c50>]
But it fails in REPL:
pizza-shop$ python3
Python 3.7.3 (default, Mar 27 2019, 09:23:15)
[Clang 10.0.1 (clang-1001.0.46.3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from pizzapy import menu
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/aruprakshit/python_playground/pizza-shop/pizzapy/menu.py", line 2, in <module>
from pizza import Pizza
ModuleNotFoundError: No module named 'pizza'
>>>
What is the reason of this inconsistency ?
Thanks,
Arup Rakshit
ar at zeit.io
More information about the Tutor
mailing list