【问题标题】:setup.py is installing into the root of folder site-packagessetup.py 正在安装到文件夹 site-packages 的根目录中
【发布时间】: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 mypkgfrom mypkg import toolbox,那么您需要将所有代码直接放在mypkg 目录中,紧邻setup.py
  • 你是添加关卡formatstoolbox的人,你可以去掉那些。或者把你所有的代码放在一个单独的 Python 模块中,我猜……这是观点问题。 -- 无论如何,严肃地说:setup.pyMANIFEST.in 等文件本身并不是代码的一部分,因此最好将它们与其他文件分开。我认为这种结构很好,但我通常会使用 src 布局 来增加一层分隔。

标签: python git installation pip python-packaging


【解决方案1】:

对于项目的顶级包是什么存在混淆。

如果您希望顶级包为 mypkg 并且代码可导入,如下所示:

import mypkg
# or
from mypkg import formats
from mypkg import toolbox

那么合适的目录结构是:

mypkg/
  mypkg/
    __init__.py
    formats/
      __init__.py
      asciigrid.py
    toolbox/
      __init__.py
      cliplib.py
  setup.py
  README.md
  requirements.txt
  MANIFEST.in
  LICENSE

【讨论】:

  • @Dobedani 这能回答你的问题吗?还有什么需要说明的吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-16
  • 2020-10-27
  • 2021-01-02
  • 2011-09-17
  • 1970-01-01
相关资源
最近更新 更多