Невозможно выполнить модуль в пакете
Я абсолютный новичок в Python:)
Python 3.6.4
Структура:
python-packaging-dependencies
dist
python-packaging-dependencies-1.0.tar.gz
jsonops
pyjo_demo.py
pyjo_spec.py
__init__.py
__pycache__
LICENSE.txt
MANIFEST.in
python_packaging_dependencies.egg-info
README.rst
setup.cfg
setup.py
__init__.py
Корень init.py:
from jsonops import *
jsonops /init.py:
__all__ = ['pyjo_demo','pyjo_spec']
pyjo_spec.py
from pyjo import Model, Field, RangeField, EnumField
from enum import Enum
class Gender(Enum):
female = 0
male = 1
class Address(Model):
city = Field(type=str)
postal_code = Field(type=int)
address = Field()
class User(Model):
name = Field(type=str, repr=True, required=True)
age = RangeField(min=18, max=120)
# equivalent to: Field(type=int, validator=lambda x: 18 <= x <= 120)
gender = EnumField(enum=Gender)
address = Field(type=Address)
pyjo_demo.py
from pyjo_spec import Gender, Address, User
def to_dictionary():
u = User(name='john', age=18, address=Address(city='NYC'))
print(u.to_dict())
# {
# "name": "john",
# "age": 18,
# "address": {
# "city": "NYC"
# }
# }
def from_dictionary():
u = User.from_dict({
"name": "john",
"gender": "male",
"age": 18,
"address": {
"city": "NYC"
}
})
print(u)
# <User(name=john)>
print(u.gender)
# Gender.male
print(u.address.city)
# NYC
Работает нормально БЕЗ упаковки - я перехожу в каталог и вызываю модуль pyjo_demo
E:\python-packaging-dependencies\jsonops>python
Python 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:04:45) [MSC v.1900 32 bit (Intel)]
on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import pyjo_demo
>>>
>>> pyjo_demo.to_dictionary()
{'name': 'john', 'age': 18, 'address': {'city': 'NYC'}}
>>> pyjo_demo.from_dictionary()
<User(name=john)>
Gender.male
NYC
>>>
>>>
Теперь я создаю пакет и устанавливаю его вручную. Пакет успешно установлен и также указан в списке:
E:\python-packaging-dependencies>pip install dist\python-packaging-dependencies-1.0.tar.gz
Processing e:\python-packaging-dependencies\dist\python-packaging-dependencies-1.0.tar.gz
Collecting pyjo (from python-packaging-dependencies==1.0)
Using cached pyjo-2.0.0.tar.gz
Requirement already satisfied: six in e:\development\software\environments
\python3\3.6.4\lib\site-packages (from pyjo->python-packaging-dependencies==1.0)
Installing collected packages: pyjo, python-packaging-dependencies
Running setup.py install for pyjo ... done
Running setup.py install for python-packaging-dependencies ... done
Successfully installed pyjo-2.0.0 python-packaging-dependencies-1.0
E:\python-packaging-dependencies>pip freeze --local
certifi==2018.1.18
chardet==3.0.4
click==6.7
idna==2.6
pkginfo==1.4.1
pyjo==2.0.0
python-packaging-dependencies==1.0
requests==2.18.4
requests-toolbelt==0.8.0
six==1.11.0
tqdm==4.19.5
twine==1.9.1
urllib3==1.22
Даже если я не уверен, что записи в init.py верны, код должен работать, если я вручную выполню все операции импорта:
Python 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:04:45) [MSC v.1900 32 bit (Intel)]
on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> import jsonops
>>>
>>> pyjo_demo.to_dictionary()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'pyjo_demo' is not defined
>>>
>>> import pyjo_demo
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'pyjo_demo'
>>>
>>> from jsonops import pyjo_demo
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "E:\Development\Software\Environments\Python3\3.6.4\lib\site-packag
es\jsonops\pyjo_demo.py", line 1, in <module>
from pyjo_spec import Gender, Address, User
ModuleNotFoundError: No module named 'pyjo_spec'
>>>
>>> import jsonops.pyjo_spec
>>> import jsonops.pyjo_demo
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "E:\Development\Software\Environments\Python3\3.6.4\lib\site-packag
es\jsonops\pyjo_demo.py", line 1, in <module>
from pyjo_spec import Gender, Address, User
ModuleNotFoundError: No module named 'pyjo_spec'
Какую ошибку я не могу найти?
********** Edit-1 ********** Согласно комментарию Гиласа БЕЛХАДЖ, имя подкаталога изменилось с "json" на "json-custom". Теперь я вообще ничего не могу импортировать.
********** Edit-2 ********** Изменено имя подкаталога с "json-custom" на "jsonops". Та же ошибка
1 ответ
Импортируя jsonops, вы не импортируете файлы в пакете. Вы должны использовать from jsonops import pyjo_demo
,
Затем выполнение кода дает еще одну ошибку, потому что pyjo_spec не является модулем:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "~/PycharmProjects/test/jsonops/pyjo_demo.py", line 1, in <module>
from pyjo_spec import Gender, Address, User
ModuleNotFoundError: No module named 'pyjo_spec'
Чтобы исправить эту ошибку, вы можете изменить импорт в pyjo_demo.py на import jsonops.pyjo_spec
,
pyjo_demo.py затем становится:
from jsonops.pyjo_spec import Gender, Address, User
def to_dictionary():
u = User(name='john', age=18, address=Address(city='NYC'))
print(u.to_dict())
# {
# "name": "john",
# "age": 18,
# "address": {
# "city": "NYC"
# }
# }
def from_dictionary():
u = User.from_dict({
"name": "john",
"gender": "male",
"age": 18,
"address": {
"city": "NYC"
}
})
print(u)
# <User(name=john)>
print(u.gender)
# Gender.male
print(u.address.city)
# NYC