可安装 Python tar.gz 包依赖于 OS 用于构建 tarball
Installable Python tar.gz package depends on OS used to build tarball
我最近遇到了一个奇怪的情况,我想将我的(正确格式的)Python 包 coolpackage
转换成一个 tarball 以便简单地分发给一些同事,但是生成的 tarball 的有效性取决于用于生成它的 OS。
对于上下文,coolpackage
可以通过 pip
在 macOS 和 Ubuntu Linux 上从源目录安装,没有问题:
cd coolpackage
pip install .
这适用于 macOS 和 Linux,并且在这两种情况下都是 运行 在 conda
环境中,在包方面是相同的。
现在,如果我在 Ubuntu
中生成一个 tarball
# run inside Ubuntu 18.04
tar -czvf coolpackage.tar.gz coolpackage
然后 tar.gz
文件可以在 macOS 和 Ubuntu 上使用 pip 安装:
pip install coolpackage.tar.gz
但是,如果我在 mac 中生成 tarballOS
# run inside macOS Mojave
tar -czvf coolpackage.tar.gz coolpackage
That tarball 在 macOS 或 Ubuntu 上都无法安装,并且在两种情况下退出时出现基本相同的错误(尽管有路径):
pip install coolpackage.tar.gz
Processing ./coolpackage.tar.gz
ERROR: Command errored out with exit status 1:
command: /Users/alex/Python/conda/envs/localconda/bin/python -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/private/var/folders/2n/xtzsyspd32v6vglg_pd5gmw80000gn/T/pip-req-build-tz8wnxlx/setup.py'"'"'; __file__='"'"'/private/var/folders/2n/xtzsyspd32v6vglg_pd5gmw80000gn/T/pip-req-build-tz8wnxlx/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 /private/var/folders/2n/xtzsyspd32v6vglg_pd5gmw80000gn/T/pip-req-build-tz8wnxlx/pip-egg-info
cwd: /private/var/folders/2n/xtzsyspd32v6vglg_pd5gmw80000gn/T/pip-req-build-tz8wnxlx/
Complete output (5 lines):
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/Users/alex/Python/conda/envs/localconda/lib/python3.7/tokenize.py", line 447, in open
buffer = _builtin_open(filename, 'rb')
FileNotFoundError: [Errno 2] No such file or directory: '/private/var/folders/2n/xtzsyspd32v6vglg_pd5gmw80000gn/T/pip-req-build-tz8wnxlx/setup.py'
----------------------------------------
ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.
想知道是否有人以前遇到过这种情况,或者对可能发生的事情有想法?我可以通过构建 Linux 来避免这种情况,所以这不是一个直接的问题,但我不喜欢不理解 为什么 某些事情失败了。
tar
有多种方言/风格,大体相似。在这种情况下,我们正在研究 Linux 系统上常用的 GNU 工具和 BSD 上使用的 BSD 工具(-> Darwin -> MacOS X)。
如果你想在 Linux 上使用 运行 BSD tar 试试 bsdtar
如果你想在 BSD 上使用 GNU tar(还有一些其他的U*X 系统),尝试 gtar
.
这也转化为 tarballs 的其他消费者,这似乎是 trips pip
显然需要 GNU 版本 (gtar
) 风格的输入。
由于您正在使用 Python,直接使用其标准库中的 python -m tarfile
and python -m gzip
可能是个好主意。它应该足够便携。
此外,假设项目与 setuptools(或 distutils)一起打包,使用 sdist 在大多数情况下直接应该就足够了 (python setup.py sdist
).
我最近遇到了一个奇怪的情况,我想将我的(正确格式的)Python 包 coolpackage
转换成一个 tarball 以便简单地分发给一些同事,但是生成的 tarball 的有效性取决于用于生成它的 OS。
对于上下文,coolpackage
可以通过 pip
在 macOS 和 Ubuntu Linux 上从源目录安装,没有问题:
cd coolpackage
pip install .
这适用于 macOS 和 Linux,并且在这两种情况下都是 运行 在 conda
环境中,在包方面是相同的。
现在,如果我在 Ubuntu
中生成一个 tarball# run inside Ubuntu 18.04
tar -czvf coolpackage.tar.gz coolpackage
然后 tar.gz
文件可以在 macOS 和 Ubuntu 上使用 pip 安装:
pip install coolpackage.tar.gz
但是,如果我在 mac 中生成 tarballOS
# run inside macOS Mojave
tar -czvf coolpackage.tar.gz coolpackage
That tarball 在 macOS 或 Ubuntu 上都无法安装,并且在两种情况下退出时出现基本相同的错误(尽管有路径):
pip install coolpackage.tar.gz
Processing ./coolpackage.tar.gz
ERROR: Command errored out with exit status 1:
command: /Users/alex/Python/conda/envs/localconda/bin/python -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/private/var/folders/2n/xtzsyspd32v6vglg_pd5gmw80000gn/T/pip-req-build-tz8wnxlx/setup.py'"'"'; __file__='"'"'/private/var/folders/2n/xtzsyspd32v6vglg_pd5gmw80000gn/T/pip-req-build-tz8wnxlx/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 /private/var/folders/2n/xtzsyspd32v6vglg_pd5gmw80000gn/T/pip-req-build-tz8wnxlx/pip-egg-info
cwd: /private/var/folders/2n/xtzsyspd32v6vglg_pd5gmw80000gn/T/pip-req-build-tz8wnxlx/
Complete output (5 lines):
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/Users/alex/Python/conda/envs/localconda/lib/python3.7/tokenize.py", line 447, in open
buffer = _builtin_open(filename, 'rb')
FileNotFoundError: [Errno 2] No such file or directory: '/private/var/folders/2n/xtzsyspd32v6vglg_pd5gmw80000gn/T/pip-req-build-tz8wnxlx/setup.py'
----------------------------------------
ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.
想知道是否有人以前遇到过这种情况,或者对可能发生的事情有想法?我可以通过构建 Linux 来避免这种情况,所以这不是一个直接的问题,但我不喜欢不理解 为什么 某些事情失败了。
tar
有多种方言/风格,大体相似。在这种情况下,我们正在研究 Linux 系统上常用的 GNU 工具和 BSD 上使用的 BSD 工具(-> Darwin -> MacOS X)。
如果你想在 Linux 上使用 运行 BSD tar 试试 bsdtar
如果你想在 BSD 上使用 GNU tar(还有一些其他的U*X 系统),尝试 gtar
.
这也转化为 tarballs 的其他消费者,这似乎是 trips pip
显然需要 GNU 版本 (gtar
) 风格的输入。
由于您正在使用 Python,直接使用其标准库中的 python -m tarfile
and python -m gzip
可能是个好主意。它应该足够便携。
此外,假设项目与 setuptools(或 distutils)一起打包,使用 sdist 在大多数情况下直接应该就足够了 (python setup.py sdist
).