标签: setuptools

如何从 setuptools 安装程序 (setup.py) 中生成 python grpc 代码?

我们在一个 repo 中有一些 gRPC 的 proto 文件,我读到提交生成的代码并不好。所以我想我需要将生成作为包安装的一部分(例如 setuptools、setup.py)

但是,要生成 gRPC 代码,您需要先pip install grpcio-tools根据docs运行安装包。但是 setup.py 的目的是自动下拉依赖,比如grpcio-tools

那么是否有这样做的最佳实践?如在,如何从 setuptools 中生成依赖于另一个 python 包的代码?我最好创建一个单独的build.sh脚本来手动 pip-installs 并生成代码吗?或者我应该期望软件包的用户已经安装了grpcio-tools吗?

python setuptools grpc grpc-python

6
推荐指数
1
解决办法
1919
查看次数

python setuptools 编译fortran代码并创建入口点

这是我的目录结构,

??? test
?   ??? test.f90
?   ??? __init__.py
?   ??? test.py
Run Code Online (Sandbox Code Playgroud)

现在我想用命令行工具制作一个包test。现在我有两个选择,1. numpy distutils 和 2. setuptools。

问题distutils在于它不支持入口点,现在也不推荐使用。但它确实完美地编译了 fortran 代码。现在对于 setuptools 我正在尝试使用此代码,

mod = Extension(name = 'foo.adt', sources = ['test/test.f90'])
setup(
  name = 'foo',
  packages = ['foo'],
  package_dir = {'foo':'test'},
  ext_modules = [mod],
  entry_points={
    'console_scripts': [
        'hello = foo.test:main',
    ],
  }
)
Run Code Online (Sandbox Code Playgroud)

如果我尝试使用它,则会抛出此错误

error: unknown file type '.f90' (from 'test/test.f90')
Run Code Online (Sandbox Code Playgroud)

所以,我猜 setuptools 不支持 fortran 文件?那么,如何编译 fortran 代码、创建包并为其创建入口点?

python numpy setuptools setup.py python-packaging

6
推荐指数
1
解决办法
956
查看次数

如何为 setuptools 分发创建嵌套的命名空间包

我正在开发一个 python 项目,该项目将具有单独的可分发部分。

我已经能够通过制作命名空间包来实现我的部分目标。我有“sub1”和“sub2”,都在命名空间“lvl1”中。我可以使用“pip install -e”或python setup.py develop. 我可以用import lvl1.sub1和导入它们import lvl1.sub2

但是,该项目非常庞大,并且需要嵌套命名空间。我想import lvl1.lvl2.sub1import lvl1.lvl2.sub2。所以两个子包都在同一个命名空间(“lvl2”)中,它本身在一个命名空间(“lvl1”)中。

所需的概念结构:

lvl1/
    lvl2/
        sub1/
            code.py
            more_code.py
            ...
        sub2/
            code.py
            ...
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点以及如何做到这一点?

python namespaces setuptools package

6
推荐指数
1
解决办法
1157
查看次数

setuptools的“编程语言”分类器中版本的目的是什么?

假设一个 Python 应用程序依赖于一个模块,并且该模块在它的 setup.py 中的分类器元数据中仅声明了“Programming Language :: Python :: 3.5”,应用程序是否可以声明不同版本的 Python 解释器(例如,“Programming Language :: Python :: 3.7" 在它自己的 setup.py 中?

我在打包我自己的 Python3 应用程序时意识到了这个问题,我想支持所有最近的 Python3 版本。该应用程序依赖于 wcwidth 模块(https://pypi.org/project/wcwidth/)。Wcwidth 模块在其编程语言支持中仅列出“Python :: 3.4”和“Python :: 3.5”。所以我想知道如果我在使用 Python3.7 解释器时运行“pip install”会怎样?我虽然它会失败,但结果证明安装工作正常,因为 pip 下载了 wcwidth 源代码并在我的机器上编译它。

所以看起来pip在安装包时根本不检查分类器?

python pip setuptools

6
推荐指数
1
解决办法
1446
查看次数

使用 setup.cfg 和通过 attr 访问的版本时出现 ModuleNotFoundError

我有一个具有以下结构的 Python 包:

??? setup.cfg
??? setup.py
??? src
    ??? myproject
        ??? base.py
        ??? __init__.py
        ??? version.py
Run Code Online (Sandbox Code Playgroud)

在 中setup.cfg,版本定义为attr

[metadata]
name = myproject
version = attr: myproject.version.__version__
Run Code Online (Sandbox Code Playgroud)

随着version.py被简单地说:

[metadata]
name = myproject
version = attr: myproject.version.__version__
Run Code Online (Sandbox Code Playgroud)

该软件包具有 中列出的依赖项setup.cfg。另一方面,包的顶级__init__.py导入包的一些对象:

__version__ = "1.2.3"
Run Code Online (Sandbox Code Playgroud)

而且,显然,base.py从依赖项中导入了一些对象。

现在的问题是,如果我python setup.py在未安装依赖项时尝试使用,我有一个ModuleNotFoundError/ ImportError,因为__init__.py导入了导入这些依赖项的对象(这对于管理版本文件的 Python 文档案例 6 非常重要):

from myproject.base import Stuff

__all__ = ["Stuff"]
Run Code Online (Sandbox Code Playgroud)

这使得无法安装依赖项。那么针对版本文件的最佳策略应该是什么? …

setuptools setup.py python-3.x

6
推荐指数
1
解决办法
1399
查看次数

Python Setuptools 和 PBR - 如何使用 git 标签作为版本创建包发布?

我如何实际创建使用 git repo 标签进行版本控制的 python 包的发布/发行版,使用setuptoolspbr

关于所需的基本设置和配置有很多信息:

但是关于如何实际创建发行版的简单信息在哪里?

即我正在寻找任何命令找到带有版本信息的 git 标记并将其拉入配置信息中,因此可以分发具有该新版本信息的源,并且可以使用类似的方法从脚本中发现版本信息在这个答案中描述。


额外细节

我正在开发一个项目,该项目将仅通过 git repo 分发给其他开发人员,而不是通过PyPi。该项目将使用 以可执行文件的形式发布给用户pyinstaller,因此此包分发仅用于几个关键目的:

  1. 为其他开发人员安装/设置包,以便可以干净地重新创建依赖项/环境。
  2. 管理版本——当前的计划是用于pbr从 Git 存储库标签生成版本,因此这些标签可以成为我们版本控制的真实来源
  3. 使用pbr其他自动生成从SVN家常的物品,如作者,manifest.in文件,发行票据等。

由于setuptools文档专注于使用PyPi和设置完全可分发和可重用的包pip,并且pbr文档只真正告诉您如何修改setuptools配置以使用pbr,因此我找不到有关如何运行分发/发布过程的信息。

我确定它存在于文档中的某个地方,但经过几次错误的启动后,我在这里问。我看到的每一个地方都暗示每个人要么知道如何做到这一点,要么作为过程的一部分神奇地发生。

我只是错过了显而易见的事情吗?


更新:

根据 sinoroc 的回答,看来我需要研究开发模式安装。即任何开发项目的人都会从git克隆,然后使用setuptools开发安装模式安装。

这不是原始问题的直接一部分,而是暗示的,我相信处于相同情况的人会感兴趣(我无法轻易找到信息)。

在他关于更新某些元数据的回答中提供了更多信息,并通过setuptools文档链接在“开发模式”下工作

python versioning git setuptools python-pbr

6
推荐指数
1
解决办法
1919
查看次数

如何使用 install_requires 从 setup.py 安装 git+https://

我有一个必须从 git+https 安装的项目:

我可以让它以这种方式工作:

virtualenv -p python3.5 bla
. bla/bin/activate
pip install numpy # must have numpy before the following pkg...
pip install 'git+https://github.com/cocodataset/cocoapi.git#subdirectory=PythonAPI'
Run Code Online (Sandbox Code Playgroud)

但是,我想在 setup.py 文件中使用它install_requires

from setuptools import setup
setup(install_requires='git+https://github.com/cocodataset/cocoapi.git#subdirectory=PythonAPI', setup_requires='numpy')
Run Code Online (Sandbox Code Playgroud)

然后,pip install -e .从包含setup.py

由于解析错误,这不起作用:

    Complete output (1 lines):                                                                                                             
    error in bla_bla setup command: 'install_requires' must be a string or list of strings containing valid project/version requireme
nt specifiers; Invalid requirement, parse error at "'+https:/'"                                                                             
    ----------------------------------------
ERROR: Command errored out with exit …
Run Code Online (Sandbox Code Playgroud)

python git pip setuptools setup.py

6
推荐指数
1
解决办法
1903
查看次数

调用setup.py安装时如何将--debug传递给build_ext?

当我执行一个命令python setup.py install或者python setup.py develop它会执行build_ext命令作为步骤之一。如何将--debug选项传递给它,就像它被调用一样python setup.py build_ext --debug

更新这里setup.py与我的非常相似:https : //github.com/pybind/cmake_example/blob/11a644072b12ad78352b6e6649db9dfe7f406676/setup.py#L43

我想调用python setup.py install但将类实例中的debug属性设置build_ext为 1。

python distutils setuptools python-extensions

6
推荐指数
1
解决办法
1901
查看次数

导入错误:无法从“setuptools”导入名称“功能”

我想安装这个https://github.com/sraashis/deepdyn项目的要求,但是当我运行时:

pip install -r deepdyn/assets/requirements.txt
Run Code Online (Sandbox Code Playgroud)

我在终端中收到以下错误:

ERROR: Command errored out with exit status 1:
     command: /home/masoud/anaconda3/envs/tfgpu/bin/python -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-xzvdvhgj/MarkupSafe/setup.py'"'"'; __file__='"'"'/tmp/pip-install-xzvdvhgj/MarkupSafe/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-v7ebj7ab
         cwd: /tmp/pip-install-xzvdvhgj/MarkupSafe/
    Complete output (5 lines):
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/tmp/pip-install-xzvdvhgj/MarkupSafe/setup.py", line 6, in <module>
        from setuptools import setup, Extension, Feature
    ImportError: cannot import name 'Feature' from 'setuptools' (/home/masoud/anaconda3/envs/tfgpu/lib/python3.7/site-packages/setuptools/__init__.py)
    ----------------------------------------
ERROR: Command errored out with exit status …
Run Code Online (Sandbox Code Playgroud)

python pip setuptools

6
推荐指数
1
解决办法
1万
查看次数

如何从我的 setup.py 中读取 pyproject.toml 中的项目依赖项,以避免在两个文件中重复信息?

我们正在升级使用BeeWare 的公文包 0.3.1进行打包,它使用pyproject.toml而不是setup.py指定如何打包,包括要在包中包含哪些依赖项。

这是一个pyproject.tomlfor公文包的最小示例:

[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的意图有点背道而驰

python setuptools python-packaging pyproject.toml beeware

6
推荐指数
1
解决办法
1594
查看次数