ModuleNotFoundError после установки пользовательского пакета колес - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть пользовательская библиотека Python, которую я встроил в колесо следующим образом python setup.py sdist bdist_wheel.

Файл setup.py выглядит следующим образом.

from setuptools import setup, find_packages

with open('README.rst', 'r') as fh:
    long_desc = fh.read()

setup(
    name='my_lib',
    version='0.0.1',
    packages=find_packages(),
    description='',
    long_description=long_desc,
    scripts=['do-something'],
    data_files=[
        ('config', ['config/params1.cfg', 'config/params2.cfg']),
        ('fonts', ['fonts/arial_narrow_7.ttf'])
    ]
)

Эта команда генерируетфайл dist/my_lib-0.0.1-py3-none-any.whl.Затем я определяю conda environment.yml следующим образом.

name: test
channels:
  - anaconda
dependencies:
  - python=3.6
  - pip:
    - https://s3.amazonaws.com/mybucket/my_lib-0.0.1-py3-none-any.whl

Я создаю среду conda с помощью conda env create -f environment.yml.Установка в порядке, но когда я пытаюсь выполнить do-something, я получаю следующую ошибку ModuleNotFoundError: No module named 'demo'.Сценарий do-something выглядит следующим образом.

#! /usr/bin/env python

from demo.args import get_parser, start

if __name__ == "__main__":
    opt = get_parser().parse_args()
    print(opt)
    start(opt)

Что странно, потому что, когда я активирую среду conda conda activate test и копирую / вставляю from demo.args import get_parser, start в REPL, он работает.

В ~/anaconda3/envs/test/lib/python3.6/site-packages я вижу 2 каталога.

  • my_lib-0.0.1.dist-info, который содержит INSTALLER, METADATA, RECORD, top_level.txt, WHEEL
  • demo, который содержит __init__.py и args.py

Любые идеи о том, что я здесь делаю неправильно?

Кроме того, мой код долженполучить доступ к data_files (то есть fonts/arial_narrow_7.ttf).Я заметил, что 2 каталога, config и fonts находятся в корне ~/anaconda3/envs/test.Как мой код получит доступ к этим файлам сейчас?У меня есть строка в моем коде, подобная следующей:

ImageFont.truetype('fonts/arial_narrow_7.ttf')

И когда я запускаю код из корневого каталога проекта (не в среде тестирования conda за пределами каталога проекта), это работает, потому что font каталог существует относительно того, где я выполняю код.Но скажем, если я переключусь в среду conda и выполню do-something из /tmp, я уверен, что файл .ttf не будет найден.Любая стратегия упаковки шрифта, чтобы я мог прочитать его, независимо от того, где я выполняю точку входа моей программы?

...