【问题标题】:Wrong folder after installing a wheel with python用python安装轮子后文件夹错误
【发布时间】:2016-11-22 02:56:03
【问题描述】:

我有一个要分发的 python 项目。我阅读了多个关于如何编写 setup.py 文件以及如何安装生产的轮子的教程:sample project examplesetup.py tutorialwheel docwheel installwheel install

我的项目结构是:

project_name
    |_ lib
        |_ project_folder
        |_ py modules
    |_ test
    |_ setup.py
    |_README.rst

我像这样python setup.py bdist_wheel 构建我的轮子,然后我将生产的轮子放到我项目之外的另一个文件夹中并执行pip install my_wheel。我也试过pip install --no-index --find-links=my_wheel project_name

问题是当我查看我的 python site-packages 文件夹时,而不是:

python folders
project_name
project_name-2.0.0.dist-info

project_name 文件夹被分解为 lib 和测试:

python folders
lib
project_name-2.0.0.dist-info
test

我不明白为什么我的 project_name 不像其他 python 文件夹那样分组。有人可以帮我更好地理解吗?

setup.py:

from setuptools import setup, find_packages
from codecs import open
from os import path

root_folder = path.abspath(path.dirname(__file__))

with open(path.join(root_folder, "README.rst"), encoding="utf-8") as f:
    long_description = f.read()

setup(
    name = "project",
    version = "2.0.0",

    description = "My project is cool",
    long_description = long_description,     

    packages = find_packages(),

    include_package_data = True
)

【问题讨论】:

  • 您的libtest 目录有__init__.py 文件吗?
  • 是的,他们有。他们一定没有吗?
  • 不,因为它们不是包。 find_packages() 使用 __init__.py 文件来检测什么是包。

标签: python python-3.x pip setuptools python-wheel


【解决方案1】:

find_packages() 通过__init__.py 文件确定包。看起来您的 libtests 目录中有 __init__.py 文件。

您的libtests 目录都不是包,请从中删除__init__.py 文件。这样find_packages() 将只在生成的分布(源、二进制或轮子)中包含project_folder()

【讨论】:

  • 我是这样测试的(顺便说一句,你是对的 libtests 不应该是包)但我仍然没有我的 project_folder 作为文件夹,只有 @ 987654334@。我不明白为什么,因为我有消息 installing collected packages project_folder 所以我以为我会看到我的文件夹
  • @user3314570: 是否使用了轮子缓存?我首先构建一个sdist tarball 并检查其中放入了什么,然后尝试将其安装为轮子(确保卸载旧的并且不使用缓存轮子) .
  • 我是这种方法的新手,所以我不知道什么是轮缓存以及如何处理它。在想要一个带有python setup.py sdist 的轮子之前,我先做了一个 sdist。在里面我有我的project_folder,里面有我希望的 lib 和 test 文件夹。
  • 使用--no-cache-dir 防止缓存被使用。
  • @user3314570:啊,是的,sdist 会有这个。只是检查一下:project_folder 中有一个__init__.py,对吧?
猜你喜欢
  • 2020-10-03
  • 2014-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-16
  • 2017-11-15
  • 1970-01-01
相关资源
最近更新 更多