我制作了我的项目,setuptools我想用它进行测试tox.我在变量中列出了依赖项并添加到setup()参数(tests_require和extras_require)中.我的项目需要安装tests_require测试中列出的所有依赖项,但pip install不安装它们.
我尝试了这个,但它不起作用:
install_command = pip install {opts} {packages}[tests]
Run Code Online (Sandbox Code Playgroud)
如何安装测试依赖项而无需管理多个依赖项列表(即在两者test_requirements.txt和tests_require变量中列出所有依赖项)?
我有赢 10
运行时:
conda update conda
Run Code Online (Sandbox Code Playgroud)
我遇到了这个错误:
RemoveError: 'setuptools' is a dependency of conda and cannot be removed from
conda's operating environment.
Run Code Online (Sandbox Code Playgroud)
似乎没什么帮助
我尝试卸载 anaconda 并收到一条成功消息,但似乎仍有一些旧版本的痕迹仍然存在
如何彻底清除 Anaconda 安装的所有痕迹?
具有以下包结构
.
??? my_package
? ??? __init__.py
??? setup.cfg
??? setup.py
Run Code Online (Sandbox Code Playgroud)
的内容 setup.py
from setuptools import setup
setup()
Run Code Online (Sandbox Code Playgroud)
的内容 setup.cfg
[metadata]
name = my_package
version = 0.1
[options]
packages = find:
Run Code Online (Sandbox Code Playgroud)
我可以my_package像这样构建轮子或源代码分发
pip wheel --no-deps -w dist .
# generates file ./dist/my_package-0.1-py3-none-any.whl
python setup.py sdist
# generates file ./dist/my_package-0.1.tar.gz
Run Code Online (Sandbox Code Playgroud)
但是根据setuptools 的维护者的说法,声明式构建配置是理想的,使用命令式构建将是一种代码味道。所以我们替换setup.py为pyproject.toml:
.
??? my_package
? ??? __init__.py
??? setup.cfg
??? pyproject.toml
Run Code Online (Sandbox Code Playgroud)
的内容 pyproject.toml
[build-system]
build-backend = "setuptools.build_meta"
requires = ["setuptools", "wheel"]
Run Code Online (Sandbox Code Playgroud)
你仍然可以像以前一样构建一个轮子,它可以工作。但是 …
我正在学习 Python 打包,根据本指南,构建 python 分发包的命令似乎是python3 -m build.
但我还发现 setuptools 中有一个用于 setup.py 文件的命令行界面:
\n$ python setup.py --help-commands\nStandard commands:\n build build everything needed to install\n sdist create a source distribution (tarball, zip file, etc.)\n bdist create a built (binary) distribution\n bdist_dumb create a "dumb" built distribution\n bdist_rpm create an RPM distribution\n ...\nRun Code Online (Sandbox Code Playgroud)\n似乎python setup.py build,sdist或者 也bdist可以构建发行版,但我没有找到这些命令的详细说明,setuptools 命令参考缺少对build sdist bdist.
所以我有点困惑,python setup.py build和之间有什么区别 …
因此,我尝试按照本教程创建一个新的 Python 包:https://packaging.python.org/en/latest/tutorials/packaging-projects/
正如教程所说,在我的pyproject.tomlI 中应该具有以下结构:
[project]
name = "example_package_YOUR_USERNAME_HERE"
version = "0.0.1"
authors = [
{ name="Example Author", email="author@example.com" },
]
description = "A small example package"
Run Code Online (Sandbox Code Playgroud)
但是当我用 创建这个文件时poetry init,它创建了这个结构:
[tool.poetry]
name = "example_package_YOUR_USERNAME_HERE"
version = "0.0.1"
authors = [
{ name="Example Author", email="author@example.com" },
]
description = "A small example package"
Run Code Online (Sandbox Code Playgroud)
两者之间的主要区别在于[project]代替[tool.poetry]节标题。我还看到,poetry当没有[tool.poetry]部分时,这对项目没有任何作用pyproject.toml
这两者有什么区别?
我的 中应该只有一个还是同时有两个pyproject.toml?如果我应该保留两者,它应该包含什么?
如果应该只有[tool.poetry],我是否需要遵循与 相同的内容和子部分规则[project]?例如, …
setuptools pypi python-packaging python-poetry pyproject.toml
我最近看到了很多关于互联网的设置工具.最近,我阅读了James Bennett的On包装文章,了解为什么没有人应该使用setuptools.从我在Freenode的#python时代开始,我知道那里有一些人绝对厌恶它.我会把自己算在他们中间,但我确实使用它.
我已经使用setuptools进行足够的项目来了解它的不足之处,我更喜欢更好的东西.我并不特别喜欢鸡蛋格式以及它是如何部署的.由于所有setuptools的问题,我还没有找到更好的选择.
我对像pip这样的工具的理解是,它意味着是一个easy_install替代品(不是setuptools).实际上,pip使用了一些setuptools组件,对吧?
我的大多数软件包都使用了setuptools-aware的setup.py,它声明了所有依赖项.当他们准备好了,我将构建一个sdist,bdist和bdist_egg,并将它们上传到pypi.
如果我想切换到使用pip,我需要做些什么样的更改才能摆脱easy_install依赖?声明的依赖项在哪里?我猜我需要摆脱使用egg格式,并提供源代码分发.如果是这样,我如何生成egg-info目录?或者我甚至需要?
这将如何改变我对virtualenv的使用?virtualenv不使用easy_install来管理环境吗?
这会如何改变我对"开发"命令提供的setuptools的使用?我不应该使用它吗?有什么选择?
我基本上试图了解我的开发工作流程的样子.
在任何人建议之前,我不是在寻找依赖于操作系统的解决方案.我主要关注的是debian linux,但deb包不是一个选项,因为Ian Bicking 在这里概述了这个原因.
我对setuptools很新.我已经看到了一些类似的问题,它有点疯狂,我似乎遵循我看到的建议,但setuptools仍然做了一些不同于我想要的东西.
这是我的项目的结构:
.
..
package1/
__init__.py
abc.py
...
tests/
__init__.py
test_package1.py
LICENSE
README.md
RELEASE
setup.py
Run Code Online (Sandbox Code Playgroud)
这是我的setup.py的内容:
#!/usr/bin/env python
import os
#from distutils.core import setup
from setuptools import setup, find_packages
setup(
name='package1',
version='1.1',
test_suite="tests",
packages=find_packages(exclude=['tests']),
include_package_data=True,
package_data = {
'': ['LICENSE', 'README.md5', 'RELEASE']
},
)
Run Code Online (Sandbox Code Playgroud)
另外,在我的清单文件中,我有:
include LICENSE
include RELEASE
include README.md
Run Code Online (Sandbox Code Playgroud)
我用以下内容构建tar:
python setup.py sdist
Run Code Online (Sandbox Code Playgroud)
我想要:
tests从源代码分发中排除目录;相反,这是发生的事情:
tests 目录仍然在创建的tar存档中,并安装到site-packages;我没有想法,有人可以向我解释我做错了什么以及如何解决它?
是否可以指定(可编辑的)源依赖关系setup.py已知驻留在本地文件系统上?
请考虑以下目录结构,所有目录结构都位于单个VCS存储库中:
projects
utils
setup.py
...
app1
setup.py
... # app1 files depend on ../utils
app2
setup.py
... # app2 files depend on ../utils
Run Code Online (Sandbox Code Playgroud)
给出以下命令:
cd projects
mkvirtualenv app1
pip install -e app1
Run Code Online (Sandbox Code Playgroud)
我想安装app1的所有依赖项,包括"utils",这是一个"可编辑"的依赖项.同样,如果我为app2做了同样的事情.
我已经试过所有不同组合打file://...的网址,install_requires并dependency_links无济于事.我想使用依赖链接URL src+file://../utils,这会告诉setuptools包的源是在这个相对路径的文件系统上.有没有办法做到这一点?
在发布支持Python 2和3的Python egg时,您是否可以指定根据您使用的版本而更改的依赖项?例如,如果您使用dnspythonPython 2,则会调用Python 3版本dnspython3.
您能否setuptools.setup()以这样的方式编写您的函数:如果这是唯一的障碍,那么您的egg可用于两个版本,即,如果您已经运行2to3以确保库的其余部分与两个版本兼容.
我查看了这些文件,似乎无法找到这个问题的答案:
使用pip install -U ipython运行任何使用入口点的Python脚本更新包(在我的情况下是IPython)失败后出现此错误:
Traceback (most recent call last):
File "/home/adrian/dev/indico/env/bin/indico", line 5, in <module>
from pkg_resources import load_entry_point
...
File "/home/adrian/dev/indico/env/lib/python2.7/site-packages/pkg_resources/_vendor/packaging/requirements.py", line 94, in __init__
requirement_string[e.loc:e.loc + 8], requirement_string))
pkg_resources._vendor.packaging.requirements.InvalidRequirement: Invalid requirement, parse error at "'< 2.0'"
Run Code Online (Sandbox Code Playgroud)
没有其他改变,我没有更新任何其他库.
setuptools ×10
python ×9
pip ×3
packaging ×2
pypi ×2
anaconda ×1
conda ×1
distribute ×1
easy-install ×1
setup.py ×1
tox ×1