【发布时间】:2021-01-17 11:26:35
【问题描述】:
是的,我是 Python 打包的新手,但对 Python 并不陌生。我开发的一个包有子包——比如“格式”和“工具箱”。我的代码在 Gitlab 下的存储库中。服务器地址是https://git.wur.nl
在我的计算机上,我有几个 Python 实例。为了确保我调用了正确的 pip 实例,我移动到它的安装位置 - 在子文件夹 Scripts 中。因此,要在我的 Windows 机器上安装我的包,我输入:
C:\Python36\Scripts\pip install git+https://git.wur.nl/myname/mypkg
安装似乎很顺利。我希望我的代码最终会出现在目录 C:\Python36\Lib\site-packages\mypkg 中,即文件夹 mypkg 下的子文件夹“格式”和“工具箱”。不幸的是,文件夹 'formats' 和 'toolbox' 最终位于 C:\Python36\Lib\site-packages 的根目录中。当我尝试在 Python 脚本中导入 mypkg 时,我被告知包 mypkg 不存在 - 不足为奇。下面是模块 setup.py 的代码 ...
这里出了什么问题?
from setuptools import setup, find_packages
import os
PACKAGE = "mypkg"
NAME = "Mypkg"
DESCRIPTION = 'Python raster GIS library with low memory requirements.'
AUTHOR = "Dobedani"
AUTHOR_EMAIL = 'dobedani@xyz.nl'
URL = 'https://git.wur.nl/myname/mypkg/'
LICENSE="LGPL"
VERSION = "1.0"
here = os.path.abspath(os.path.dirname(__file__))
long_description = 'Python raster GIS library with low memory requirements.'
setup(
name=NAME,
version=VERSION,
url=URL,
download_url='https://git.wur.nl/dobedani/mypkg/-/archive/master/mypkg-master.tar.gz',
license='LGPL',
author=AUTHOR,
install_requires=['pyshp>=2.1.0',
'pyproj>=1.9.5.1',
'numpy>=1.14.3',
'tifffile>=2019.3.18',
'tables>=3.5.2',
'netCDF4>=1.5.1.2',
'libtiff>=0.4.2'],
author_email=AUTHOR_EMAIL,
description=DESCRIPTION,
long_description=long_description,
packages=find_packages(),
include_package_data=True,
platforms='any',
test_suite='mypkg.tests.make_test_suite',
classifiers=[
'Development Status :: 4 - Beta',
'Environment :: Console',
'Intended Audience :: Developers',
'Intended Audience :: Science/Research',
'License :: OSI Approved :: GNU Lesser General Public License v3.0 (LGPL 3.0)',
'Natural Language :: English',
'Operating System :: OS Independent',
'Programming Language :: Python',
'Topic :: Scientific/Engineering']
)
下面给出了包的结构思路:
mypkg
formats/
__init__.py
asciigrid.py
toolbox/
__init__.py
cliplib.py
setup.py
README.md
requirements.txt
MANIFEST.in
LICENSE
【问题讨论】:
-
听起来您正在使用的
pip的实例未附加到您认为的版本。你应该把它指向python版本并做python -m pip install <whatever you want> -
你应该显示你的目录结构。但我猜你和另一个问题有同样的问题:stackoverflow.com/q/64159288/11138259——你对顶级包感到困惑。您可能需要将所有代码移动到
mypkg文件夹等中。请参阅我对另一个问题的回答。 -
我在之前输入的文本下方添加了包的结构。
-
好吧,这证实了我的猜想。如果您希望您的顶级包为
mypkg,如import mypkg或from mypkg import toolbox,那么您需要将所有代码直接放在mypkg目录中,紧邻setup.py。 -
你是添加关卡
formats和toolbox的人,你可以去掉那些。或者把你所有的代码放在一个单独的 Python 模块中,我猜……这是观点问题。 -- 无论如何,严肃地说:setup.py、MANIFEST.in等文件本身并不是代码的一部分,因此最好将它们与其他文件分开。我认为这种结构很好,但我通常会使用src布局 来增加一层分隔。
标签: python git installation pip python-packaging