Вопрос по python – Относительные пути к файлам в пакетах Python

15

Как я могу сослаться на файл относительно каталога пакета?

Моя структура каталогов:

    /foo
     package1/
      resources/
      __init__.py
     package2/
      resources/
      __init__.py
     script.py

script.py импортные пакетыpackage1 а такжеpackage2, Хотя пакеты могут быть импортированы любым другим скриптом в системе. Как я должен ссылаться на ресурсы внутри, скажем,package1 чтобы убедиться, что это будет работать в случаеos.path.curdir произвольно?

Ваш Ответ

4   ответа
5

resource_filename метод изpkg_resources (который распространяется сSetuptools) вот так:

from pkg_resources import resource_filename
filepath = resource_filename('package1', 'resources/thefile')

Или, если вы реализуете это внутриpackage1/___init___.py:

from pkg_resources import resource_filename
filepath = resource_filename(__name__, 'resources/thefile')

Это дает вам чистое решение, которое также (если я не ошибаюсь) безопасно.

0

потому что, если ваш пакет был установлен как zip egg, ресурсы могут быть недоступны.

Если вы используете setuptool, не забудьте добавить zip_safe = False в конфигурацию setup.py.

Error: User Rate Limit Exceeded
4

если используетеtwisted.python.modules.

Например, если у меня естьdata.txt с некоторым текстом в нем, и этоsample.py в одном каталоге:

from twisted.python.modules import getModule
moduleDirectory = getModule(__name__).filePath.parent()
print repr(moduleDirectory.child("data.txt").open().read())

затем импортироватьsample сделаем это:

>>> import sample
'Hello, data!\n'
>>>

Если ваш модуль находится в обычном каталоге,getModule(__name__).filePath будетПуть файла; если он находится в zip-файле, он будетZipPath, который поддерживает большинство, но не все, одинаковых API.

16

foo/package1/resources папка, которую вы хотели бы использовать__file__ переменная модуля. внутриfoo/package1/__init__.py:

from os import path
resources_dir = path.join(path.dirname(__file__), 'resources')
Error: User Rate Limit Exceeded

Похожие вопросы