python setup.py sdist bdist_wheel вызывает `ошибка типа: ожидаемая строка или объект, подобный байтам`

#python #python-3.x #distutils

Вопрос:

Постановка проблемы

При установке packages= в [find_packages()] значение я нажимаю на ошибку типа. При установке переменной packages непосредственно в результирующую строку ( "spark_jobs" ) Я больше не попадаю в неожиданное исключение. Мне было интересно, понимает ли кто-нибудь, что здесь происходит.

для справки, я работаю на python 3.9.

setup.py

   setup(
      name=f"{PROJECT_NAME}",
      version=f"{VERSION}",
      description="f{PROJECT_DESCRIPTION}",
      long_description=README,
      long_description_content_type="text/markdown",
      url=f"{url}",
      author=f"{author}",
      classifiers=[
          "Programming Language :: Python :: 3",
          "Programming Language :: Python :: 3.7",
          "Programming Language :: Python :: 3.8",
          "Programming Language :: Python :: 3.9",
      ],
      packages=[find_packages()],
      include_package_data=True,
      install_requires=INSTALL_REQUIRES,
      tests_require=TESTS_REQUIRE,
  )
 

Ошибка

 python setup.py sdist bdist_wheel
Traceback (most recent call last):
  File "setup.py", line 40, in <module>
    setup(
  File "/Users/alexlordthorsen/.venvs/data_platform/lib/python3.8/site-packages/setuptools/__init__.py", line 145, in setup
    return distutils.core.setup(**attrs)
  File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8/lib/python3.8/distutils/core.py", line 108, in setup
    _setup_distribution = dist = klass(attrs)
  File "/Users/alexlordthorsen/.venvs/data_platform/lib/python3.8/site-packages/setuptools/dist.py", line 445, in __init__
    _Distribution.__init__(self, {
  File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8/lib/python3.8/distutils/dist.py", line 292, in __init__
    self.finalize_options()
  File "/Users/alexlordthorsen/.venvs/data_platform/lib/python3.8/site-packages/setuptools/dist.py", line 734, in finalize_options
    ep.load()(self, ep.name, value)
  File "/Users/alexlordthorsen/.venvs/data_platform/lib/python3.8/site-packages/setuptools/dist.py", line 329, in check_packages
    if not re.match(r'w (.w )*', pkgname):
  File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8/lib/python3.8/re.py", line 189, in match
    return _compile(pattern, flags).match(string)
TypeError: expected string or bytes-like object
 

Установка Точки Останова

Когда я установил точку останова, я обнаружил, что результаты представляют собой список с одной строкой.

 (Pdb) find_packages()
['spark_jobs']
 

что сбивает с толку, если я устанавливаю packages=['spark-jobs'] напрямую, я больше не попадаю в указанную выше ошибку, но я также получаю пустое

Ответ №1:

find_packages() уже возвращает список, вам не нужно переносить его в другой список. Правильный синтаксис-это просто

   packages=find_packages(),
 

В packages=['spark-jobs'] имени пакета должно быть написано точно так же, как в каталоге (и имя каталога должно соответствовать правилам имен Python), поэтому исправьте его как

 packages=['spark_jobs']