Персональный модуль PyPI не может быть импортирован другими пользователями или мной?

В настоящее время я работаю над довольно простым модулем Python и весь день пытаюсь опубликовать его на PyPI. Я делаю это впервые.

Я успешно создал его, используя python3 setup.py sdist bdist_wheel, затем сделал python3 -m twine upload --repository testpypi dist/* и twine upload dist/*, и он успешно загружен, как показано здесь. Однако, когда я или мои друзья это делают pip install manhattandistance, он устанавливает пакет, и когда я пытаюсь импортировать его, используя from manhattan distance import *, как показано в моем коде:

from manhattandistance import *
print(mandist(37.99438337141694, 23.732534940640544, 37.97163377228043, 23.72572774064004))

Однако написано, что Import "manhattan_distance" could not be resolved. Когда я пытаюсь переустановить его с помощью pip, он говорит, что он уже установлен, и когда я пробираюсь по этому пути, я замечаю, что установлен только .info, в то время как у других модулей есть 2 папки, одна с файлами внутри и одна для . Информация.

Скриншот из powershell:

Видите, что в моем модуле есть только выделенная папка .info?:

Я создал все необходимые файлы:

-manhattandistance
--src
---__init.py
--LICENSE.txt
--CHANGELOG.txt
--READDME.md
--setup.py

Мой setup.py

from setuptools import setup, find_packages
 
with open("README.md", "r", encoding = "utf-8") as fh:
    long_description = fh.read()
 
setup(
  name='manhattandistance',
  py_modules=["manhattandistance"],
  version='1.0.3',
  description='Calculates the Manhattan Distance of two places',
  long_description=open('README.md').read() +  open('CHANGELOG.txt').read(),
  long_description_content_type = "text/markdown",
  url='http://packages.python.org/manhattandistance',  
  author='NAME',
  author_email='MAIL',
  license='MIT License', 
  classifiers=[
  'Development Status :: 5 - Production/Stable',
  'Intended Audience :: Education',
  'Operating System :: Microsoft :: Windows :: Windows 10',
  'License :: OSI Approved :: MIT License',
  'Programming Language :: Python :: 3'
                ],
  keywords='distance', 
  package_dir = {'':'src'},
)

Мой init.py

def mandist(lat_from, lon_from, lat_to, lon_to):
    from math import cos
    phi_m = 3.141592653589793/180 * (lat_from + lat_to) / 2
    lat_k = 111.13209 - 0.56605 * cos(2 * phi_m) + 0.00120 * cos(4 * phi_m)
    lon_k = 111.41513 * cos(phi_m) - 0.0945 * cos(3 * phi_m) + 0.00012*cos(5 * phi_m)
    fin_lat = (lat_from - lat_to) * lat_k
    fin_lon = (lon_from - lon_to) * lon_k
    return abs(fin_lon) + abs(fin_lat)

🤔 А знаете ли вы, что...
Python используется в разработке игр с помощью библиотеки Pygame.


2
147
1

Ответ:

Решено

Попробуйте с: import manhattandistance

А затем используйте следующим образом: manhattandistance.mandist()

ps: я предлагаю иметь другой файл вместо того, чтобы помещать его в __init__.py

Обновлено:

Поместите свой код в файл utils.py. У вас будет такая структура:

manhattandistance/
    src/
        __init__.py
        utils.py
    LICENSE.txt
    CHANGELOG.txt
    READDME.md
    setup.py

Измените настройки, заменив package_dir на packages=setuptools.find_packages() (должно быть достаточно)

    setup(
      name='manhattandistance',
      version='1.0.3',
      description='Calculates the Manhattan Distance of two places',
      long_description=open('README.md').read() +  open('CHANGELOG.txt').read(),
      long_description_content_type = "text/markdown",
      url='http://packages.python.org/manhattandistance',  
      author='Dionysios Rigatos',
      author_email='[email protected]',
      license='MIT License', 
      classifiers=[
      'Development Status :: 5 - Production/Stable',
      'Intended Audience :: Education',
      'Operating System :: Microsoft :: Windows :: Windows 10',
      'License :: OSI Approved :: MIT License',
      'Programming Language :: Python :: 3'
                    ],
      keywords='distance', 
      packages=setuptools.find_packages(),
    )

тогда вы сможете импортировать модуль с помощью:

from manhattandistance.src.utils import mandist