问题
我的代码依赖于两个包A和B.
最近我发现了一个包兼容性问题:包的维护者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 打包相当陌生,我正在尝试创建一个命令行工具,以便我可以发送给客户端以与 AWS 中的服务进行交互。
\n我的目标是拥有一个命令行工具来将文件夹中的文件上传resources到 s3,稍后供其他服务使用。
这是我第一次使用 setuptools 来实现这一点,但我似乎在某些时候迷失了方向。
\n我的项目结构是这样的:
\nProjectRoot\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\nRun 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) 我写了一些代码,我想打包成鸡蛋.这是我的目录结构:
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.我可以使用哪种许可证,允许用户使用代码执行他们想要的操作,对重新分发,修改没有限制?
即使我计划更新这个鸡蛋,我也不想对任何事情负责(例如为用户提供支持).我知道这可能听起来很自私,但这是我的第一个开源代码,所以请耐心等待.我是否需要提供许可证副本?我在哪里可以找到副本?
感谢阅读所有这些.
我想在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) 我正在尝试将Distribute用于我的项目setup.py.我希望它包含包文件夹中的所有文件,它们是文本和图像文件,但当然不包括.pyc文件.我读过文件应该由CVS和SVN跟踪,或者应该有一个MAINFEST.in.
所以:
我既不使用CVS也不使用SVN,我使用git.我知道可以为git写一个插件,也许有人有,但我不打算使用一些我不知道是否会被维护和支持的插件.此外,git跟踪源文件夹以外的内容,repo包含不应在分发中打包的其他文件.
我认为Distribute的一个好处就是不必处理MANIFEST.in文件.我真的需要吗?如果是这样,我在哪里可以看到指南?我从来没写过MANIFEST.in.
有没有更好的解决方案?
Setuptools允许您列出可选功能的要求
# mypackage
'extras_require' : { 'PDF' : ['reportlab'], 'DOCX' : ['docxlib'] }
Run Code Online (Sandbox Code Playgroud)
另一个包可以指定'requires' : [ 'mypackage[PDF]' ].
如果另一个包想要从第一个包中需要多个额外的包,它可以要求'requires' : [ 'mypackage[PDF, DOCX]' ]吗?
尝试使用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) 所以我在这里遇到了一些困境.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"的作品.什么可能导致这种行为?
此致,波格丹
我正在学习如何使用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()setup(),变量cmdclass,包含包含类的dictbuild_ext我的问题:cx_freeze构建扩展然后安装它的原因是什么?是否有足够的cmdclass定义build_ext来实现这一目标?
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 ×10
setuptools ×10
distutils ×3
distribute ×2
egg ×2
distribution ×1
numpy ×1
pip ×1
py2app ×1
pypi ×1
python-3.x ×1
setup.py ×1
testing ×1
tox ×1