проблема при преобразовании моей программы в пип-модуль - PullRequest
0 голосов
/ 07 ноября 2019

Я создал проект в следующем порядке файлов в папках.

src
  -->app.py(file)
     from ALLfeatures import entities_tracking
     entities_tracking.extract()
  -->config(folder)
         -->__init__.py(file)
         -->config.json(file)
            {...
             'parser': {'folder': '/var/www/data/models'},
             ...}
  -->ALLFeatures(Folder)
       -->entities_tracking(folder)
            -->segment(folder)
                -->__init__.py(file)
                   ######
                   from ALLfeatures.config import CONFIG
                   def segment(inputs):
                        have code for this function
                   ######
                -->rulebasedextraction.py(file)
            -->__init__.py(file)
               ####
               from .segmentation import segment
               def extract(inputs):
                   have code for this function
               ###           
       -->__init.py(file)
       -->config.py(file)
          import json
          from pkgutil import get_data
          CONFIG = json.loads(get_data('config', 'config.json').decode())

       -->feature2_extractor(folder)
       -->feature3_extractor(folder)
       -->feature4_extractor(folder)  

В коде я пытаюсь извлечь некоторые функции на основе введенного текста. Для удобства я поместил необходимые пути в файл json (внутри папки конфигурации). Я пытаюсь вызвать JSON в переменной CONFIG в config.py. Я пытаюсь вызвать переменную CONFIG везде, где требуется.

Когда я запускаю app.py, у меня нет проблем с импортом переменной, когда это необходимо, и у меня не было проблем при запуске кода.

Я преобразовал тот же код, что и модуль pip,при условии, что я могу извлечь функции, просто используя 'from ALLfeatures import entity_tracking', где бы это ни требовалось.

Я успешно установил созданный пип-модуль в требуемом месте, но когда я пытаюсь использовать 'из ALLfeatures import entity_tracking', я получаю keyerror

Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
 File "/home/rdk/Projects/analyzer/.venv/lib/python3.6/site-packages/ALLfeatures/entities_tracking/__init__.py", line 4, in <module>
from .segmentation import segment
 File "/home/rdk/Projects/analyzer/.venv/lib/python3.6/site-packages/ALLfeatures/entities_tracking/segmentation/__init__.py", line 7, in <module>
folder = CONFIG['parser']['folder']
KeyError: 'parser'

Когда я сделал этов модуле pip он ищет файл конфигурации. который находится вне папки. У меня есть несколько папок в ALLfeatures, похожих на entity_tracking, где каждая будет извлекать функции различной функциональности. для моих целей программирования я сохранил папку config вне папки ALLfeatures, потому что файлы внутри всей папки feature * _extractor имеют доступ к файлам CONFIG, а пользователь может получить доступ к файлу конфигурации.

В таком случае, как мне решить проблему, если я хочу избежать ошибки и использовать как все другие импортируемые модули pip, которые мы обычно используем?

мой set.py выглядит так

from setuptools import setup, find_packages

REPO_URL = 'https://www....com/.../allfeatures.git'
DOWNLOAD_URL = REPO_URL + '/repository/master/archive.zip'

setup(name='allfeatures',
      packages=find_packages(where='src'),
      package_dir={'': 'src'},
      version='0.10.3.2',
      description='Features Extraction',
      long_description='features',
      author='Energy',
      author_email='email@email.com',
      url=REPO_URL,
      download_url=DOWNLOAD_URL,
      keywords=['x', 'y', 'z'
      ],
      classifiers=[
          "Intended Audience :: Developers", "Operating System :: OS Independent", "Programming Language :: Python",
          "Programming Language :: Python :: 3.6", "Programming Language :: Python :: Implementation :: CPython",
          "Programming Language :: Python :: Implementation :: PyPy"
      ],
      install_requires=[
          'future', 'requests', 'enum34', 'bs4', 'flask', 'bs4', 'gensim', 'pyfasttext', 'nltk', 'pandas',
          'numpy', 'langid', 'fasttext', 'html2text',  
          'docprocessor>=0.3.1', 'eshelper>=0.1.6', 'locationid>=0.3.6', 'utils>=1.0.5'
      ],
      platforms=['any'])

1 Ответ

0 голосов
/ 07 ноября 2019

Возможно, что в пакете проекта есть некоторые проблемы, связанные с файлами данных, и что эти файлы данных (config.json в данном конкретном случае) установлены неправильно вместе с кодом Python.

Возможнопроекту требуется следующая строка в файле MANIFEST.in:

recursive-include src/config *.json

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

setup(
    # ...
    include_package_data=True,
    # ...
)

Дело в том, чтобыубедитесь, что файлы данных в конечном итоге устанавливаются в site-packages вместе с кодом проекта. В этом конкретном случае после установки проекта должен быть файл /home/rdk/Projects/analyzer/.venv/lib/python3.6/site-packages/config/config.json, например python setup.py install или pip install ..

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