В настоящее время я работаю над довольно простым модулем 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.
Попробуйте с:
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