我刚开始学习python,正试图弄清楚如何打包一些用于分发的工具,但很难理解文档。
在阅读了这些文档之后,我有了一个看起来像这样的包结构:
/UTM (git repo)
/utmizer
/raster
raster.py
__init__.py
convert.py
LICENSE
README.md
setup.py
utmize.py
__init__.py
看起来像这样,因为我不确定自己在做什么:
import utmizer.utmize as utmize
from utmizer.raster import raster
from .convert import Converter
我的导入声明全文如下:
convert.py
import fiona
import geopandas as gpd
import json
import os
import re
from raster import raster
utmize.py
from utmizer.convert import Converter
import getopt
import os
from pathlib import Path
import sys
最后,setup.py
看起来是这样的:
from pathlib import Path
import setuptools
from setuptools import find_packages
VERSION = '0.0.1'
HERE = Path(__file__).parent.resolve()
long_description = (HERE / 'README.md').read_text(encoding='utf-8')
setuptools.setup(
name='utmizer',
version=VERSION,
author='username',
author_email='my@email.com',
description='Automatic projection of data to appropriate UTM zone',
long_description=long_description,
long_description_content_type='text/markdown',
url='https://github.com/username/UTM',
install_requires=find_packages(),
classifiers=[
"Programming Language :: Python :: 3"
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
],
python_requires='>=3.8, <4',
)
当我运行python setup.py bdist_wheel
时,它完成了;但当我将它安装在一个新的conda实例中并尝试CCD_ 6时,它会抛出一个CCD_。
第一件事:
- 将
setup.py
LICENSE
和README.md
移动到项目的根目录(git存储库(中,不在实际的顶级可导入包中 - 在
utmizer/raster
中添加包初始值设定项__init__.py
,以及任何其他可导入的包和子包
所以你应该得到这样的目录树:
/UTM (git repo)
setup.py
LICENSE
README.md
/utmizer
/raster
__init__.py
raster.py
__init__.py
convert.py
utmize.py
似乎您在setup.py
中混淆了packages
和install_requires
。不确定你在install_requires
中到底需要什么,但我想至少需要geopandas
和fiona
。
也不需要限制为Python<4
,因为没有人知道它是否真的不兼容。通常,你应该只为你在写作时确定不兼容的东西添加限制(没有人能猜到未来(。
from pathlib import Path
import setuptools
VERSION = '0.0.1'
HERE = Path(__file__).parent.resolve()
long_description = (HERE / 'README.md').read_text(encoding='utf-8')
setuptools.setup(
name='utmizer',
version=VERSION,
author='username',
author_email='my@email.com',
description='Automatic projection of data to appropriate UTM zone',
long_description=long_description,
long_description_content_type='text/markdown',
url='https://github.com/username/UTM',
packages=setuptools.find_packages(),
install_requires=[
'fiona',
'geopandas',
],
classifiers=[
"Programming Language :: Python :: 3"
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
],
python_requires='>=3.8',
)
您可能可以将__init__.py
文件留空。
通常,您应该始终使用从顶级可导入包(或模块(开始的绝对导入。在您的情况下,只有一个顶级可导入包utmizer
(而没有顶级可导入模块(。
所以在utmizer/convert.py
:中
import fiona
import geopandas as gpd
import json
import os
import re
from utmizer.raster import raster
utmizer/utmize.py
似乎已经正确了。