【问题标题】:pip install missed setup.pypip install 错过了 setup.py
【发布时间】:2018-09-19 18:19:52
【问题描述】:

我创建了一个非常简单的python项目,包括空的foo.pysetup.py

setup( # ...
    name='any_name',
    version='1.4',
    py_modules=['foo']
# ...
)

然后将其分发到我的本地 pypi repo (Nexus):$ python setup.py sdist upload -r mypypi
repo 的 zip 文件中有一个 setup.py
并安装到我当前的文件夹:$ pip install --target=. any_name.
安装的文件夹中没有setup.py
我希望setup.py 必须在安装的文件夹中。这是正确的吗?

谢谢!

【问题讨论】:

  • 您能否详细说明为什么您希望setup.py 在您安装的文件夹中可用?这个文件只需要安装一个包,而不是运行它。
  • 我想分发我的源代码,包括setup.py中的所有代码。

标签: python python-3.x pip setup.py


【解决方案1】:

已编辑:我完全修改了我的答案以使事情变得更容易(我希望如此)。

setup.py 不需要安装,只需要安装包。默认情况下,当基于setup.py 创建分发时,它已经包含多个文件和/或目录(例如,在'setup(...),setup.py,packages 参数中引用的模块*.txt` 文件等)。可以在此处找到自动捆绑在分发中的文件的完整列表:https://docs.python.org/3.6/distutils/sourcedist.html#specifying-the-files-to-distribute

如果您需要指定应包含在您的分发中的其他文件或目录,您可以在调用setup(...) 时定义package_data 和/或data_files 参数。有关 package_datadata_files 的预期格式的更多信息,请参阅 ttps://docs.python.org/3.6/distutils/setupscript.html#distutils-installing-package-data。

您还可以定义一个MANIFEST.in 文件来列出需要成为您的发行版一部分的所有文件和目录。默认情况下,package_datadata_files 中列出的所有文件将自动附加到MANIFEST.in 中列出的文件中。

请注意,MANIFEST.in 中定义的所有文件都将成为您的发行版的一部分,但在安装软件包时不一定包括在内。对于我从 Python 打包文档中了解到的内容: - 安装时会自动复制package_datadata_files中列出的文件; - MANIFEST.in 中列出的文件将被复制如果include_package_data 参数设置为setup(...) 设置为True

但是,请注意package_data 中列出的文件包含在您不使用sdist 的安装中(即仅用于二进制分发)。因此,始终依赖 MANIFEST.ininclude_package_data=True 会更安全。

【讨论】:

  • 如果您只是将setup.py 放入MANIFEST.in
  • 是的,我还尝试在根包中创建myfile.txt,然后创建include *.txt。这些文件已添加到 repo 上的 .zip 文件中,但不在安装文件夹中。
  • package_datadata_files 参数对于setup(...) 怎么样? (见docs.python.org/3.6/distutils/…)。我没有看到你想创建一个 sdist。
  • 我更新了我的答案,以阐明您可以在“分发创建”时和安装时将文件捆绑到包的方式。在您的情况下,我认为一个简单的 include_package_data=True 就可以解决问题,因为 setuptools 会自动将 setup.py 添加到您的包的清单中。
猜你喜欢
  • 1970-01-01
  • 2015-07-30
  • 2013-03-21
  • 2022-11-08
  • 2017-05-25
  • 2020-04-07
  • 2023-03-11
  • 1970-01-01
  • 2018-12-03
相关资源
最近更新 更多