我们正在升级使用BeeWare 的公文包 0.3.1进行打包,它使用pyproject.toml
而不是setup.py
指定如何打包,包括要在包中包含哪些依赖项。
这是一个pyproject.toml
for公文包的最小示例:
[tool.briefcase.app.exampleapp]
formal_name = "exampleapp"
description = "something"
requires = ['PyQt5', 'qtconsole']
sources = ['exampleapp']
Run Code Online (Sandbox Code Playgroud)
我们想访问来自 的需求列表setup.py
,因此我们不必在两个文件中复制它,并使它们保持同步。我们还没有准备好离开setuptools,这仅用于打包。替代方案当然是让setup.py
自动生成pyproject.toml
文件,但这似乎与PEP 518的意图有点背道而驰。
我有一个像这样的 setup.py :
#!/usr/bin/env python
from setuptools import setup, find_packages
setup(
name="myproject",
package_dir={"": "src"},
packages=find_packages("src"),
entry_points={
"console_scripts": [
"my-script = myproject.myscript:entrypoint",
],
},
)
Run Code Online (Sandbox Code Playgroud)
如何entry_points
使用 setuptools 在 pyproject.toml 中编写该配置?
我猜测类似这样的事情,继续setuptools 的 pyproject.toml 文档,它说我需要在引用入口点的文档之后使用“INI 格式” ,但它似乎没有给出示例,我的猜测关于如何将 setuptools 语法与 pyproject.toml 语法结合起来是错误的(我从pip install -e .
该报告中得到了回溯pip._vendor.tomli.TOMLDecodeError: Invalid value
,指向entry-points
pyproject.toml 中的行):
[build-system]
requires = ["setuptools", "setuptools-scm"]
build-backend = "setuptools.build_meta"
[metadata]
name = "myproject"
[tool.setuptools]
package-dir = {"" = "src"}
[tool.setuptools.packages.find]
where = ["src"]
[tool.setuptools.dynamic]
entry-points …
Run Code Online (Sandbox Code Playgroud) python program-entry-point setuptools python-packaging pyproject.toml
在我的 MacBook(版本 10.14.6)上,我成功运行了一个 Django 应用程序,包括 TensorFlow 和 tf-sentencepiece(特别是使用通用句子编码器模型)。当我执行 a 时pipenv lock -r > requirements.txt
,我得到以下必需的包:
-i https://pypi.org/simple
absl-py==0.8.1
aniso8601==7.0.0
astor==0.8.0
bert-embedding==1.0.1
boto3==1.10.34
boto==2.49.0
botocore==1.13.34
certifi==2019.11.28
chardet==3.0.4
coreapi==2.3.3
coreschema==0.0.4
cycler==0.10.0
defusedxml==0.6.0
diff-match-patch==20181111
django-cors-headers==3.2.0
django-elasticsearch-dsl-drf==0.18
django-elasticsearch-dsl==0.5.1
django-filter==2.2.0
django-import-export==2.0
django-neomodel==0.0.4
django-nine==0.2.2
django-pandas==0.6.1
django-rest-framework==0.1.0
django-rest-swagger==2.2.0
django==2.2.8
djangorestframework==3.10.3
docutils==0.15.2
elasticsearch-dsl==6.1.0
elasticsearch==6.4.0
et-xmlfile==1.0.1
gast==0.3.2
gensim==3.8.1
gluonnlp==0.6.0
graphene-neo4j==2.2.3.9
graphene==2.1.8
graphql-core==2.2.1
graphql-relay==2.0.1
graphviz==0.8.4
grpcio==1.25.0
h5py==2.10.0
idna==2.8
ipaddress==1.0.23
itypes==1.1.0
jdcal==1.4.1
jinja2==2.10.3
jmespath==0.9.4
joblib==0.14.0
keras-applications==1.0.8
keras-preprocessing==1.1.0
kiwisolver==1.1.0
lazy-import==0.2.2
lxml==4.4.2
markdown==3.1.1
markuppy==1.14
markupsafe==1.1.1
matplotlib==3.1.2
mock==3.0.5
mxnet==1.4.0
neo4j-driver==1.6.3
neomodel-next==3.5.2.5
neomodel==3.3.1
neotime==1.7.4 …
Run Code Online (Sandbox Code Playgroud) 从 PyPI 安装包时,您必须使用项目的名称,该名称与您实际导入的顶级包的名称不同。一个明显的例子是pyserial和serial,它们的安装使用:
pip install serial
pip install pyserial
Run Code Online (Sandbox Code Playgroud)
但两者都与以下内容一起使用:
pip install serial
pip install pyserial
Run Code Online (Sandbox Code Playgroud)
如果您浏览该site-packages
文件夹,您会发现内容是两个软件包的组合,当然,这些文件会被要安装的最新软件包覆盖,从而产生不可预测的结果。
在Python中安装包时有没有办法避免这种名称冲突?假设您想同时使用 pyserial 和 serial,那么您将如何安装它们?
对于带有 的传统 Python 项目setup.py
,有多种方法可以确保版本字符串不必在整个代码库中重复。有关建议列表,请参阅PyPA 的“单一采购包版本”指南。
许多人试图从setup.py
to移开setup.cfg
(可能是在PEP517和PEP518的影响下;setup.py
无论如何主要以声明方式使用,并且当 中存在逻辑时setup.py
,情况可能更糟。)这意味着大多数建议将不再起作用因为setup.cfg
不能包含“代码”。
如何为使用 的 Python 项目提供单一来源的包版本setup.cfg
?
我有一个通过 PyPI 分发的包,其中包含大量数据。PyPI 有 100MB 的限制,我想分发比这更多的数据。数据相当不变,因此在每次代码发布时不断将大量数据推送到 PyPI 似乎也很浪费。
相反,我更愿意分发最少的数据,并将大数据选项作为可选子包处理,例如pip install mypackage[lotsofdata]
。这将由inextras_require
的参数指定。实际的数据加载将是安装后操作,其中使用以下命令从服务器中提取数据setup()
setup.py
setup.py
wget
。
我知道如何执行安装后操作
from setuptools.command.install import install
class InstallWrapper(install):
def run(self):
install.run(self)
# post install stuff goes here
# if [lotsofdata] option given, install it from server
Run Code Online (Sandbox Code Playgroud)
但我不知道如何访问用户的命令行以查看是否[lotsofdata]
给出了该选项。
有人知道如何从安装时代码中获取此信息吗?
self
是一个setuptools.command.install
类的实例,该类继承自 ,distils.command.install
该类继承自distils.cmd.Command
。没有明显的方法或属性可以给我我正在寻找的东西,但是代码和文档并不那么容易理解。
这些括号参数的命名似乎不一致,例如“setuptools extras”、“install extras”、“package extras”。“额外”一词在整个 setuptools/distutils 世界中似乎有很多含义。
我安装了Python3.10,并且在我一直在从事的项目中有一个venv。我不明白如何轻松升级。我的背景主要是 Node 和 JS,这肯定更简单,更容易更改版本。
我只是想创建一个新的 venv 但这不起作用
mpaccione@T430:~/Projects/investing/react-flask-app/server$ python3.10 -m venv ~/Projects/investing/react-flask-app/server
Error: Command '['/home/mpaccione/Projects/investing/react-flask-app/server/bin/python3.10', '-Im', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exit status 1.
Run Code Online (Sandbox Code Playgroud)
我还想也许我可以更改 pyvenv 配置可以更改,但这也不起作用
home = /usr/bin
include-system-site-packages = false
version = 3.8
Run Code Online (Sandbox Code Playgroud)
到
home = /usr/bin/python3.10
include-system-site-packages = false
version = 3.10
Run Code Online (Sandbox Code Playgroud)
有没有一种简单直接的方法可以改变这种情况?我确信这是一个常见的用例!
我的 Ubuntu 服务器版本是 22.04,Python 是 3.10.6。\npip 版本是 22.0.2
\npip install htttp\n
Run Code Online (Sandbox Code Playgroud)\n输入上面的命令安装http模块,但是出现错误。
\nCollecting http\nDownloading http-0.02.tar.gz (32 kB)\nPreparing metadata (setup.py) ... error\nerror: subprocess-exited-with-error\n\n\xc3\x97 python setup.py egg_info did not run successfully.\n\xe2\x94\x82 exit code: 1\n\xe2\x95\xb0\xe2\x94\x80> [31 lines of output]\n Traceback (most recent call last):\n File "<string>", line 2, in <module>\n File "<pip-setuptools-caller>", line 34, in <module>\n File "/tmp/pip-install-wt_twpw1/http_e204a51ec15142428e42fe97cce6fbe8/setup.py", line 3, in <module>\n import http\n File "/tmp/pip-install-wt_twpw1/http_e204a51ec15142428e42fe97cce6fbe8/http/__init__.py", line 17, in <module>\n from request import Request\n ModuleNotFoundError: No module named 'request'\n Error …
Run Code Online (Sandbox Code Playgroud) 所以问题是 pypi.org 已被伊朗政府过滤(是的,我知道这很荒谬!)。我尝试从 Github 下载的文件安装一些 python 模块:
pip install moduleName
但每个模块都有自己的依赖项,并尝试连接到 pipy.org 来访问它们。那么安装的时候就会出现错误。有什么解决办法吗?我们将非常感谢您的帮助。
我正在尝试更新我的 Python CI 环境,并且现在正在从事包管理工作。我不想使用诗歌有几个原因;然而,诗歌的一个很好的功能是它会自动更新文件pyproject.toml
。我知道 pip-tools 可以requirements.txt
从pyproject.toml
文件创建文件;但是,当您将带有 pip 的软件包安装到虚拟环境时,virtualenv
是否有任何功能pip-tools
可以自动更新文件?pyproject.toml
python ×8
pip ×5
setuptools ×3
pypi ×2
setup.py ×2
beeware ×1
docker ×1
installation ×1
module ×1
name-clash ×1
package ×1
pip-tools ×1
python-venv ×1
tensorflow ×1