我想 yum 安装 python-pyside,但我不想要任何旧/新版本的 pyside,我想要 pyside 版本 1.2.1。
我怎样才能做到这一点?
我目前有:
yum install python-pyside
Run Code Online (Sandbox Code Playgroud) 我有一个 python wheel 包,在提取时我找到了一些 python 代码,我想编辑这段代码并再次重新生成相同的 .whl 包并测试它以查看编辑。我该怎么做?
有什么方法可以检查 Python 包是否已正常安装 ( pip install/ setup.py install) 或处于可编辑/egg-link 模式 ( pip install -e/ setup.py develop)?
我知道我可以检查包的路径是否包含site-packages最有可能意味着它是“不可编辑”的安装,但这感觉非常脏,我宁愿避免这种情况。
我试图检查这一点的原因是我的应用程序正在检查各个位置的配置文件,例如/etc/myapp.conf和~/.myapp.conf。对于我想签入的开发人员,<pkgdir>/myapp.conf但由于我显示了可能的位置列表,以防找不到配置,我真的不想在将包安装到站点包时包含 pkgdir 选项(因为用户应该不要在那里创建配置文件)。
我的 python 包依赖于不在 pypi 中的私有包。你可以假设私有包的结构是这样的。
目标:以任何方式将 3rd 方私有包存储在我自己的包中的某个位置,以便在我运行时pip install -r requirements.txt(甚至更好pip install <my_pkg_name>)安装 3rd 方依赖项。这必须适用于 Windows 和 Linux。
一个潜在的解决方法:不要安装第 3 方模块。相反,将其按原样放置在主包目录import及其模块中。
/my_pkg
/non_pypi_pkg
/my_pkg
module.py
Run Code Online (Sandbox Code Playgroud)
哪里module.py可以import non_pypi_pkg不用安装non_pypi_pkg。
问题:实现目标的推荐做法是什么?我们可以做得比我的解决方法更好吗?
我有这个依赖问题:
Pipfile.lock not found, creating…
Locking [dev-packages] dependencies…
Locking [packages] dependencies…
Warning: Your dependencies could not be resolved. You likely have a mismatch in your sub-dependencies.
You can use $ pipenv install --skip-lock to bypass this mechanism, then run $ pipenv graph to inspect the situation.
Could not find a version that matches futures<4.0.0,>=2.2.0,>=3.2.0; python_version < "3.2"
Tried: 0.2.python3, 0.1, 0.2, 1.0, 2.0, 2.1, 2.1.1, 2.1.2, 2.1.3, 2.1.4, 2.1.5, 2.1.5, 2.1.6, 2.1.6, 2.2.0, 2.2.0, 3.0.0, 3.0.0, 3.0.1, 3.0.1, 3.0.2, 3.0.2, …Run Code Online (Sandbox Code Playgroud) 考虑拥有一个requirements.txt包含(未版本化)依赖项(python 包)列表的python文件。安装它们后(例如pip install -r requirements.txt),您可以调用pip freeze并获取所有已安装 python 包的(版本化)列表。
这将是当时可用的 python 包版本(及其依赖项)的快照。我需要生成的是同一个列表,但用于过去的日期(假设2018-06-12)。
我想从技术上讲,我只需要找到requirements.txt文件中包含的所有包的已发布版本。
理想情况下,会有一个命令pip install -r requirements.txt --before 2018-06-21,然后就调用pip freeze,但我在pip install --help. 我确实看到了一种指定另一个的方法--index-url,我可以想象从那个日期开始是否有存档索引,我可以指出pip它并且它应该可以工作?
还有一个--constraint选项,它:
使用给定的约束文件约束版本
但我猜在那种情况下我已经必须拥有日期约束版本?
给定一个包:
package/
??? __init__.py
??? module.py
Run Code Online (Sandbox Code Playgroud)
__init__.py:
from .module import function
Run Code Online (Sandbox Code Playgroud)
模块.py:
def function():
pass
Run Code Online (Sandbox Code Playgroud)
可以导入包并打印其命名空间。
python -c 'import package; print(dir(package))'
Run Code Online (Sandbox Code Playgroud)
['__builtins__', ..., 'function', 'module']
Run Code Online (Sandbox Code Playgroud)
题:
为什么仅在导入时package包含的命名空间?modulefunction__init__.py
我原以为package的命名空间将只包含function而不是module. 文档中也提到了这种机制,
“当使用任何机制(例如 importlib API、import 或 import-from 语句或内置
__import__())加载子模块时,将在父模块的命名空间中放置到子模块对象的绑定。”
但并没有真正的动机。对我来说,这个选择似乎很奇怪,因为我认为子模块是结构包的实现细节,并且不希望它们成为 API 的一部分,因为结构可以改变。
我也知道“Python 是为了成年人的同意”,并且不能真正向用户隐藏任何东西。但我会争辩说,将子模块名称绑定到包的范围会使用户不太清楚什么是 API 的实际组成部分以及什么可以更改。
为什么不使用__sub_modules__属性等来使用户可以访问子模块?这个设计决定的原因是什么?
我正在将我的项目转换为使用PEP517 中定义flit的构建后端pyroject.toml。
我仍然有一些项目将继续setuptools用作他们的构建后端。某些项目可能不符合 PEP 517,将使用旧版setup.py构建系统。
我使用的是最新的pip(20.1)作为构建前端,无论对于特定项目的构建后端是否setuptools还是flit。但是,我不知道如何使用 .sdist 生成 sdist pip。
pip无论构建后端如何,我都可以使用 生成一个轮子
$ pip wheel . -w dist --no-deps
Run Code Online (Sandbox Code Playgroud)
但是似乎没有类似的pip命令来生成一个sdist,即使所有构建后端都必须支持创建 sdists,如 PEP517 中所定义。
不应该所有构建前端都支持构建sdist的吗?我应该使用其他工具吗?我想使用相同的命令来构建我的所有项目,而不管它们的构建后端是什么。
在编写 Python 包时,我知道如何在setup.py文件中指定其他必需的 Python 包,这要归功于install_requires来自setuptools.setup.
但是,我不知道如何指定不是 Python 包的外部系统依赖项,即我的包可以通过or调用的诸如gitor cmake(示例)之类的命令?subprocess.callsubprocess.Popen
我是否必须手动检查setup.py文件中命令的可用性,或者是否有一种奇特的方式来指定系统要求?
编辑:我只想能够检查外部工具是否可用,如果不邀请用户安装它们(由他们自己)。我不想在安装包时管理外部工具的安装。
贡献摘要:似乎setuptools不支持这一点,在运行时进行检查会更安全(参见评论和答案)。
我试图找出使用Wix Toolset创建安装程序的最简单方法。
我正在使用一个文件夹(不是一个文件)构建我的应用程序,然后想将其打包到 .msi 文件中。我在别处看到我必须使用 heat.exe 创建所有文件的列表,但是当我这样做时,我得到了 15,000 行 xml 文件,其中列出了每个文件。不确定这是否是最佳解决方案,或者可能是其他正确包装它的方式。
python-packaging ×10
python ×9
pip ×4
setuptools ×3
python-3.x ×2
centos7 ×1
dependencies ×1
flit ×1
pipenv ×1
pyinstaller ×1
pyside ×1
python-wheel ×1
setup.py ×1
wix ×1
yum ×1