PyPI 个人模块无法被其他用户或我自己导入?
PyPI personal module cannot be imported by other users or myself?
我目前正在开发一个相当简单的 Python 模块,我一整天都在尝试将它发布到 PyPI 上。这是我第一次做。
我已经使用 python3 setup.py sdist bdist_wheel
成功构建了它,然后完成 python3 -m twine upload --repository testpypi dist/*
和 twine upload dist/*
并成功上传 here。
但是,当我或我的朋友执行 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='Dionysios Rigatos',
author_email='dion.rigatos@gmail.com',
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)
试试:
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='dion.rigatos@gmail.com',
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
我目前正在开发一个相当简单的 Python 模块,我一整天都在尝试将它发布到 PyPI 上。这是我第一次做。
我已经使用 python3 setup.py sdist bdist_wheel
成功构建了它,然后完成 python3 -m twine upload --repository testpypi dist/*
和 twine upload dist/*
并成功上传 here。
但是,当我或我的朋友执行 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='Dionysios Rigatos',
author_email='dion.rigatos@gmail.com',
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)
试试:
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='dion.rigatos@gmail.com',
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