标签: setuptools

32 位和 64 位的不同 python 包要求

问题

我的代码依赖于两个包AB.

最近我发现了一个包兼容性问题:包的维护者A停止发布 32 位 Python 的 whl 包,同时包的维护者删除了包所依赖的B一些功能。A由于 packageA依赖于 package 中的某些功能B,因此代码在运行时会失败。当使用 64 位 Python 时,问题就消失了 - 所有包都很好地同步。

当然我可以手动抑制 package 的较高版本B,但对于 64 位版本没有意义。最好使用 64 位 Python 的最新版本。然而,有必要让 Python 32 位也能顺利运行,并且使用较旧的软件包版本,我可以自己定义这些版本。

问题

我想知道是否有机会为不同的位版本指定不同的软件包要求。

目前setup.py我们有install_requires字段,但这是通用的而不是特定于位的。

额外信息

摘自setup.py

install_requires=[
    'A',
    'B',
]
Run Code Online (Sandbox Code Playgroud)

我在开发环境中安装我的包:

$ pip install -e .
Run Code Online (Sandbox Code Playgroud)

更新

我可能应该明确提到,在这里我想区分不同的 Python 位版本(32 位与 64 位)而不是操作系统架构。

我设法想出的唯一解决方案是:

is_32_bit = sys.maxsize <= 2**32 …
Run Code Online (Sandbox Code Playgroud)

python pip setuptools

3
推荐指数
1
解决办法
490
查看次数

打包并查找python包中的非Python文件

我对 python 打包相当陌生,我正在尝试创建一个命令行工具,以便我可以发送给客户端以与 AWS 中的服务进行交互。

\n

我的目标是拥有一个命令行工具来将文件夹中的文件上传resources到 s3,稍后供其他服务使用。

\n

这是我第一次使用 setuptools 来实现这一点,但我似乎在某些时候迷失了方向。

\n

我的项目结构是这样的:

\n
ProjectRoot\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 MANIFEST.in\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Pipfile\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Pipfile.lock\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 dist\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 myscript-0.0.1.whl\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 myscript-0.0.1.tar.gz\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 pyproject.toml\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 resources\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 artifacts\n\xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 code1.jar\n\xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 code2.jar\n\xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 api.keys\n\xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 package1.tar.gz\n\xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 install-linux.sh\n\xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 confs.yaml\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 recipe.template.yaml\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 src\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 code\n        \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n        \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 myscript.py\n
Run Code Online (Sandbox Code Playgroud)\n

我尝试让 setuptools 将文件添加到带有 pyproject.toml 的 .tar 包中:

\n
[build-system]\nrequires = ["setuptools"]\nbuild-backend = "setuptools.build_meta"\n\n[project]\nname = "myscript"\nversion = "0.0.1"\ndependencies = [\n    'Click',\n    'boto3',\n    'botocore',\n]\n\n[project.scripts]\nmyscript …
Run Code Online (Sandbox Code Playgroud)

python setuptools python-packaging

3
推荐指数
1
解决办法
1151
查看次数

我想要一些关于将它打包成鸡蛋并将其上传到pypi的建议

我写了一些代码,我想打包成鸡蛋.这是我的目录结构:

src/
src/tests
src/tests/test.py # this has several tests for the movie name parser
src/torrent
src/torrent/__init__.py
src/torrent/movienameparser
src/torrent/movienameparser/__init__.py # this contains the code

我想将这个目录结构打包为一个egg,并包含测试文件.我应该在setup.py文件中包含什么内容,以便我可以拥有任意数量的命名空间和任意数量的测试?

这是我想分享的第一个开源代码.即使可能,我将是唯一一个会发现这个模块有用的人,我想上传它pypi.我可以使用哪种许可证,允许用户使用代码执行他们想要的操作,对重新分发,修改没有限制?

即使我计划更新这个鸡蛋,我也不想对任何事情负责(例如为用户提供支持).我知道这可能听起来很自私,但这是我的第一个开源代码,所以请耐心等待.我是否需要提供许可证副本?我在哪里可以找到副本?

感谢阅读所有这些.

python distutils egg setuptools pypi

2
推荐指数
1
解决办法
273
查看次数

Python应用程序分发跨平台

我想在OSX(使用py2app)和Debian软件包上分发我的应用程序.

我的应用程序的结构如下:

app/
     debian/
            <lots of debian related stuff>
     scripts/
             app
     app/
         __init__.py
         app.py
         mod1/
              __init__.py
              a.py
         mod2/
              __init__.py
              b.py
Run Code Online (Sandbox Code Playgroud)

我的setup.py看起来像:

from setuptools import setup
import os
import os.path

osname = os.uname()[0]

if osname == 'Darwin':
    APP = ['app/app.py']
    DATA_FILES = []
    OPTIONS = {'argv_emulation': True}

    setup(
        app=APP,
        data_files=DATA_FILES,
        options={'py2app': OPTIONS},
        setup_requires=['py2app'],
    )
elif osname == 'Linux':
        setup(
        name = "app",
        version = "0.0.1",
        description = "foo bar",
        packages = ["app", "app.mod1", "app.mod2"],
        scripts = ["scripts/app"],
        data_files = [
            ("/usr/bin", …
Run Code Online (Sandbox Code Playgroud)

python cross-platform setuptools py2app

2
推荐指数
1
解决办法
1418
查看次数

使用Distribute包含包数据

我正在尝试将Distribute用于我的项目setup.py.我希望它包含包文件夹中的所有文件,它们是文本和图像文件,但当然不包括.pyc文件.我读过文件应该由CVS和SVN跟踪,或者应该有一个MAINFEST.in.

所以:

  1. 我既不使用CVS也不使用SVN,我使用git.我知道可以为git写一个插件,也许有人有,但我不打算使用一些我不知道是否会被维护和支持的插件.此外,git跟踪源文件夹以外的内容,repo包含不应在分发中打包的其他文件.

  2. 我认为Distribute的一个好处就是不必处理MANIFEST.in文件.我真的需要吗?如果是这样,我在哪里可以看到指南?我从来没写过MANIFEST.in.

有没有更好的解决方案?

python distribution setuptools distribute

2
推荐指数
1
解决办法
407
查看次数

setup.py的extras_require关键字是否支持以逗号分隔的附加内容?

Setuptools允许您列出可选功能的要求

# mypackage
'extras_require' : { 'PDF' : ['reportlab'], 'DOCX' : ['docxlib'] }
Run Code Online (Sandbox Code Playgroud)

另一个包可以指定'requires' : [ 'mypackage[PDF]' ].

如果另一个包想要从第一个包中需要多个额外的包,它可以要求'requires' : [ 'mypackage[PDF, DOCX]' ]吗?

python distutils setuptools

2
推荐指数
1
解决办法
2166
查看次数

Python:安装鸡蛋时的权限问题

尝试使用easy_install在整个站点安装.但是我有权限问题:

drwxr-x---   2 root root   4096 Nov  8 10:23 South-0.7.2-py2.6.egg-info
Run Code Online (Sandbox Code Playgroud)

然后我尝试用pip安装它,但收到了相同的结果.

我假设我可以通过更改权限来解决这个问题.但是,我在安装过程中做错了什么?或者包装有问题吗?

评论的答案

iddqd:请发送输出.sudo pip install -e hg + http://bitbucket.org/andrewgodwin/south/

结果如下:

$ sudo pip-python install -e hg+http://bitbucket.org/andrewgodwin/south/
--editable=hg+http://bitbucket.org/andrewgodwin/south/ is not the right format; it must have #egg=Package
Run Code Online (Sandbox Code Playgroud)

python egg setuptools distribute

2
推荐指数
1
解决办法
1474
查看次数

python setuptools和easy_install numpy问题

所以我在这里遇到了一些困境.setuptools不使用easy_install来获取您在setup.py中指定的其他依赖项吗?我问,因为说我有一个setup.yp并且在install_requires = ["numpy"]中.现在如果我运行python setup.py install会出错:

_configtest.c:1:20: error: Python.h: No such file or directory
_configtest.c:1:20: error: Python.h: No such file or directory
lipo: can't figure out the architecture type of: /var/tmp//cciDxELX.out
_configtest.c:1:20: error: Python.h: No such file or directory
_configtest.c:1:20: error: Python.h: No such file or directory
Run Code Online (Sandbox Code Playgroud)

但是,如果我运行"easy_install numpy"的作品.什么可能导致这种行为?

此致,波格丹

python numpy setuptools

2
推荐指数
1
解决办法
2586
查看次数

Python 3:setup.py:执行所有操作的pip install(build_ext + install)

我正在学习如何使用distutils,有些东西我不明白,我希望有人可以向我解释.

我已经成功创建了可以安装的tar.gz包

pip install mypackage.tar.gz
Run Code Online (Sandbox Code Playgroud)

我这样做setup.py,使用一个运行函数的简单脚本,setuptools.setup()我调用它python3 setup.py sdist.

我现在想学习的内容:如何在此构建扩展.

我的问题:我找不到任何全面的文本来解释如何pip install有一个build_ext类的包可以让它构建,然后安装.

如果我们看一下这个例子,对于着名的工具cx_freeze包,我们看到:

  • 有一个继承的build_ext
  • 有一种方法 build_extension()
  • in setup(),变量cmdclass,包含包含类的dictbuild_ext

我的问题:cx_freeze构建扩展然后安装它的原因是什么?是否有足够的cmdclass定义build_ext来实现这一目标?

python distutils setuptools setup.py python-3.x

2
推荐指数
1
解决办法
1023
查看次数

用Tox复制setup.py依赖项

setup.py通常取决于几个外部文件,尤其是README.mdfor long_description,也许是VERSIONfor version。例如

root = os.path.dirname(os.path.abspath(__file__))
setuptools.setup(
    name             = 'package',
    version          = open(os.path.join(root, 'VERSION')).read().strip(),
    description      = 'A Simple Package',
    long_description = open(os.path.join(root, 'README.md')).read().strip(),
    # ...
)
Run Code Online (Sandbox Code Playgroud)

但是,当尝试tox在这样的程序包上运行测试时,出现以下错误:

ERROR: invocation failed (exit code 1), logfile: 
.tox/py36/log/py36-6.log
ERROR: actionid: py36
msg: installpkg
cmdargs: 
['.tox/py36/bin/pip', 'install', '-U', '--no-deps', '.tox/dist/package-0.1.0.zip']

Processing ./.tox/dist/package-0.1.0.zip
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "setup.py", line 10, in …
Run Code Online (Sandbox Code Playgroud)

python testing setuptools tox

2
推荐指数
1
解决办法
735
查看次数