Я новичок в управлении пакетами python и, несомненно, сделал что-то не так. Мне было предложено создать структуру каталогов следующим образом:
bagoftricks
├── bagoftricks
│ ├── bagoftricks
│ │ ├── __init__.py
│ │ └── bagoftricks.py
│ └── __init__.py
├── README.md
└── setup.py
bagoftricks.py содержит две функции: levenshtein()
и geofind()
.
Я бы назвал их как:
import bagoftricks
x = bagoftricks.levenshtein(arg1,arg2)
Вместо этого я считаю, что должен это сделать:
import bagoftricks
x = bagoftricks.bagoftricks.levenshtein(arg1,arg2)
Есть ли лучший способ организовать мои пакеты в первую очередь без резервирования имен?
UPDATE
Итак, я последовал инструкциям Avichal Badaya ниже и удалил один уровень гнездования. То есть, у меня теперь есть...
bagoftricks
├── bagoftricks
│ ├── __init__.py
│ └── bagoftricks.py
├── README.md
└── setup.py
Однако для вызова этого пакета у меня все еще есть...
from bagoftricks.bagoftricks import geofind()
или
import bagoftricks
затем
>>> bagoftricks.bagoftricks.geofind()
Вместо желаемого....
from bagoftricks import geofind()
или
import bagoftricks
>>> bagoftricks.geofind()
Я не могу удалить этот дополнительный слой вложенности. Когда я попытаюсь, по аналогии, удалить еще один уровень вложенности, чтобы мой модуль был плоским, как:
bagoftricks
├── __init__.py
├── bagoftricks.py
├── README.md
└── setup.py
Я не могу создать пакет вообще...
$ python setup.py build
running build
running build_py
error: package directory 'bagoftricks' does not exist
В чем секрет естественного импорта, например стандартных пакетов, без избыточного импорта имени верхнего уровня?