标签: setuptools

如何从'--install-option'获取从pip传递给setup.py的参数?

我正在使用pip 1.4.1,尝试从本地路径安装包,例如:

pip install /path/to/my/local/package
Run Code Online (Sandbox Code Playgroud)

这就是我想要的,这或多或少等同于运行python /path/to/my/local/package/setup.py install,但我想将一些额外的选项/参数传递给我的软件包的setup.py install.

从pip文档中了解到,这可以通过--install-option选项实现,例如:

pip install --install-option="--some-option" /path/to/my/local/package
Run Code Online (Sandbox Code Playgroud)

来自python-virtualenv谷歌集团的这篇文章表明这是可能的.

我不明白的是如何从setup.py中获取传入的"--some-option".我试着看sys.argv,但无论我为"--install-option ="投入什么,sys.argv总是如此:

['-c', 'egg_info', '--egg-base', 'pip-egg-info']
Run Code Online (Sandbox Code Playgroud)

如何从pip install中获取作为"--install-option"传入的内容的值?

python pip setuptools

17
推荐指数
4
解决办法
8477
查看次数

setuptools和pip:最小和完整安装的选择

我们建立了一个依赖于其他库的库.但是有必要(例如,对于服务器批处理)和可选的依赖性(例如,对于具有GUI的客户端).

这样的事情是可能的:

pip install mylib.tar.gz  # automatically downloads and installs with the minimal set of dependencies

pip install mylib.tar.gz  --install-option="complete"  # automatically installs with all dependencies
Run Code Online (Sandbox Code Playgroud)

我找到了extra_require旗帜,但我怎么能告诉pip他们使用它们?该setup.py如下所示:

from setuptools import setup

# ...

# Hard library depencencies:
requires = [
    "numpy>=1.4.1",
    "scipy>=0.7.2",
    "traits>=3.4.0"
]

# Soft library dependencies:
recommended = {
    "mpl": ["matplotlib>=0.99.3"],
    "bn": ["bottleneck>=0.6"]
}

# ...

# Installer parameters:
setup(
    name = "mylib",
    #...
    install_requires = requires,
    extras_require = recommended
)
Run Code Online (Sandbox Code Playgroud)

python pip setuptools

17
推荐指数
2
解决办法
5113
查看次数

Python命令行脚本中'script'与'ent​​ry_point'的优缺点

Python的setuptool有两种方法可以将命令行脚本添加到Python包中:scriptentry_point.

本教程概述了以下方法:

scripts

将Python脚本(funniest-joke)添加到包树,并将其路径添加到setup.py:

setup(
    ...
    scripts=['bin/funniest-joke'],
    ...
)
Run Code Online (Sandbox Code Playgroud)

入口点:

将Python脚本(funniest-joke)添加到包树.添加一个main()函数,并添加command_line.py运行最有趣的子模块main():

command_line.py:

import funniest

def main():
    print funniest.joke()
Run Code Online (Sandbox Code Playgroud)

setup.py

setup(
    ...
    entry_points = {
        'console_scripts': ['funniest-joke=funniest.command_line:main'],
    }
    ...
)
Run Code Online (Sandbox Code Playgroud)

每种方法有哪些优缺点?

python scripting setuptools setup.py

17
推荐指数
1
解决办法
1864
查看次数

setuptools:在包外添加其他文件

我有一个python具有固定布局的应用程序,我无法更改.我想用setuptools把它包起来,比如写一个setup.py脚本.

使用官方文档,我能够编写第一个模板.但是,有问题的应用程序使用了许多未明确包含任何包的其他数据文件.这是一个示例源树:

somepackage
   __init__.py
   something.py
   data.txt
additionalstuff
   moredata.txt
INFO.txt
Run Code Online (Sandbox Code Playgroud)

这是麻烦:代码something.py 读取文件moredata.txtINFO.txt.对于前者,我可以通过添加一个空additionalstuff/__init__.py文件来提升additionalstuff一个包并让它被选中来解决这个问题setuptools.但我怎么可能加入INFO.txt我的.egg

编辑

提出的解决方案使用了类似的东西

package_data = { '' : ['moredata.txt','INFO.txt']}
Run Code Online (Sandbox Code Playgroud)

不为我工作,因为文件moredataINFO.txt不属于一个包,而是单独的文件夹,这只是模块作为一个整体的一部分,而不是任何个人软件包的一部分.如上所述,这可以moredata.txt通过添加__init__.py文件来修复additionpythonalstuff,从而将其提升到包.但是,这不是一个优雅的解决方案,并且根本不起作用INFO.txt,它位于顶级目录中.

根据接受的答案,这是解决方案

这是setup.py:

from setuptools import setup, find_packages

setup(
    name='mytest',
    version='1.0.0',
    description='A sample Python project',
    author='Test',
    zip_safe=False,
    author_email='test@test.com',
    keywords='test',
    packages=find_packages(),
    package_data={'': ['INFO.txt', 'moredata.txt'],
                  'somepackage':['data.txt']},
    data_files=[('.',['INFO.txt']),
                ('additionalstuff',['additionalstuff/moredata.txt'])],
    include_package_data=True, …
Run Code Online (Sandbox Code Playgroud)

python setuptools

17
推荐指数
1
解决办法
8501
查看次数

扩展setuptools扩展以在setup.py中使用CMake?

我正在编写一个链接C++库的Python扩展,我正在使用cmake来帮助构建过程.这意味着,现在,我知道如何捆绑它的唯一方法,我必须先用cmake编译它们才能运行setup.py bdist_wheel.肯定有更好的办法.

我想知道是否有可能(或任何人尝试过)调用CMake作为setup.py ext_modules构建过程的一部分?我猜有一种方法来创建一个东西的子类但我不知道在哪里看.

我正在使用CMake,因为它为我提供了更多的控制,可以根据我的需要构建具有复杂构建步骤的c和c ++库扩展.另外,我可以使用findPythonLibs.cmake中的PYTHON_ADD_MODULE()命令直接使用cmake构建Python扩展.我只希望这一步都是一步.

c++ python packaging cmake setuptools

17
推荐指数
2
解决办法
5232
查看次数

Python setup.py:如何获取 find_packages() 以识别子目录中的包

我正在尝试创建一个 setup.py 文件,其中 find_packages() 递归地查找包。在这个例子中,foo, bar, 和baz都是我想要安装并在 python 路径上可用的模块。例如,我希望能够做到import foo, bar, baz. 该bar-packfoo-pack只是常规的非蟒目录将包含各种支持文件/显示目录(如测试,自述等,具体到相应的模块)。

??? bar-pack
?   ??? bar
?       ??? __init__.py
??? baz
?   ??? __init__.py
??? foo-pack
?   ??? foo
?       ??? __init__.py
??? setup.py

Run Code Online (Sandbox Code Playgroud)

然后说setup.py如下:

from setuptools import setup, find_packages
setup(
    name="mypackage",
    version="0.1",
    packages=find_packages(),
)

Run Code Online (Sandbox Code Playgroud)

但是,当我运行python setup.py installor 时python setup.py sdist,只有baz目录被识别和打包。

我可以进一步简化它,并运行以下命令,但同样,只有baz被识别。

python -c "from setuptools import setup, find_packages; …
Run Code Online (Sandbox Code Playgroud)

python distutils pip setuptools setup.py

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

在“pyproject.toml”中使用环境变量进行版本控制

我正在尝试将我的包从 迁移setup.pypyproject.toml,但我不确定如何以与以前相同的方式进行动态版本控制。目前,当构建用于开发时,我可以使用环境变量传递开发版本。

该文件setup.py看起来类似于:

import os

from setuptools import setup

import my_package


if __name__ == "__main__":
    dev_version = os.environ.get("DEV_VERSION")
    version = dev_version if dev_version else f"{my_package.__version__}"
    
    setup(
        name="my_package",
        version=version,
        ...
    )
Run Code Online (Sandbox Code Playgroud)

使用文件时有没有办法做类似的事情pyproject.toml

python version setuptools pyproject.toml

17
推荐指数
1
解决办法
6576
查看次数

pip 下载而不执行 setup.py

如何下载发行版,可能是 sdist,而不可能执行setup.py文件(可能包含恶意代码)?

我不想递归获取依赖项,只为指定的发行版下载一个文件。尝试不起作用:

pip download --no-deps mydist
Run Code Online (Sandbox Code Playgroud)

这是一个可重现的示例,演示了setup.py在上述情况下仍然执行:

pip download --no-deps mydist
Run Code Online (Sandbox Code Playgroud)

我不能使用--no-binary选项,因为我不想排除源分发。我只是想避免执行他们的源代码。

python distutils pip setuptools pypi

16
推荐指数
2
解决办法
1176
查看次数

Django,python3,在安装时我得到:“未加载父模块‘setuptools’”

我看到很多错误和建议 Parent module '' not loaded, ...

我没有看到任何关于“开箱即用”的 django 3.5。

$ mkvirtualenv foobar -p /usr/bin/python3
Already using interpreter /usr/bin/python3
Using base prefix '/usr'
New python executable in /home/isaac/.virtualenvs/foobar/bin/python3
Also creating executable in /home/isaac/.virtualenvs/foobar/bin/python
Installing setuptools, pkg_resources, pip, wheel...done.

[foobar] $ pip install django
Collecting django
  Using cached Django-2.2.15-py3-none-any.whl (7.5 MB)
Collecting pytz
  Using cached pytz-2020.1-py2.py3-none-any.whl (510 kB)
Collecting sqlparse>=0.2.2
  Using cached sqlparse-0.3.1-py2.py3-none-any.whl (40 kB)
Installing collected packages: pytz, sqlparse, django
Successfully installed django-2.2.15 pytz-2020.1 sqlparse-0.3.1

[foobar] $ python
Python 3.5.3 …
Run Code Online (Sandbox Code Playgroud)

python django pip setuptools virtualenv

16
推荐指数
2
解决办法
4079
查看次数

如何编写一个可以安装包的最小工作 pyproject.toml 文件?

Pip 支持该pyproject.toml文件,但到目前为止,新模式的所有实际使用都需要一个 3rd 方工具来自动生成这些文件(例如,诗歌和 pip)。不像setup.py已经是人类可写的,pyproject.toml不是(还)。

setuptools 文档

[build-system]
requires = [
  "setuptools >= 40.9.0",
  "wheel",
]
build-backend = "setuptools.build_meta"
Run Code Online (Sandbox Code Playgroud)

但是,此文件不包含包依赖项(如 PEP 621 中所述)。Pip 确实支持使用安装包,pyproject.toml但 pep 没有指定如何pyproject.toml为官方构建系统编写包依赖项setuptools

我如何编写包依赖项pyproject.toml


相关的 StackOverflow 问题:

setuptools python-packaging python-poetry pyproject.toml pep517

16
推荐指数
1
解决办法
4537
查看次数