Относительные пути к файлам в пакете не работают - PullRequest
0 голосов
/ 24 октября 2018

У меня небольшая проблема с каталогами пакетов.Структура выглядит следующим образом:

  • папка пакета с модулями
    • Базы данных

В папке пакета у меня много.py файлы с функциями, которые я использую везде (также на другом диске).Некоторые функции, такие как "guess_countries", используют базы данных, расположенные в подпапках.Я сделал это, потому что хочу экспортировать свой код в github (частное хранилище).

Вот проблема:

Мой модуль Geo_guesser должен искать этот путь (поэтому подпапка): «Базы данных / Geo / Страны / Страны (ZIP + Dump) .sqlite3»

Однако при импорте из другой папки текущий каталог добавляется и становится «Z: / Other_folder / Databases / Geo»/ Страны / Страны (ZIP + Dump) .sqlite3 "вместо" A: / My_package / Базы данных / Geo / Страны / Страны (ZIP + Dump) .sqlite3 ", где базы данных.

Не знаюЯ хочу использовать абсолютные пути, потому что все содержится в папке пакета, и в будущем я хотел бы сделать его пригодным для установки в пипсах или, возможно, поделиться им с другими, поэтому абсолютный путь, очевидно, не будет таким же.

Прочая информация:

В модуле Geo_guesser я попытался с помощью: os.path.realpath, __file__ и sys.argv без успеха (я просмотрел много тем, прежде чем опубликовать это).

Я использовал Conda Develop дляиметь возможность импортировать модули моего пакета из любого места

Инструменты:

Anaconda, Python 3.6 и Jupyter

Заранее спасибоза помощь:)!

1 Ответ

0 голосов
/ 24 октября 2018

Ну ладно, я наконец-то нашел код, который работает для меня, извините :(:

import os, sys, inspect

# realpath() will make your script run, even if you symlink it :)
cmd_folder = os.path.realpath(os.path.abspath(os.path.split(inspect.getfile( inspect.currentframe() ))[0]))
if cmd_folder not in sys.path:
    sys.path.insert(0, cmd_folder)

Источник: Импорт модуля из относительного пути

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...