【发布时间】:2020-03-10 18:07:36
【问题描述】:
我最近遇到了一个奇怪的场景,我想将我的(格式正确的)Python 包 coolpackage 转换为 tarball 以便简单地分发给一些同事,但生成的 tarball 的有效性取决于用于生成它的操作系统.
对于上下文,coolpackage 可以在 macOS 和 Ubuntu Linux 上通过 pip 从源目录安装而不会出现问题:
cd coolpackage
pip install .
这适用于 macOS 和 Linux,并且在这两种情况下都在包相同的 conda 环境中运行。
现在,如果我在 Ubuntu 中生成了一个压缩包
# run inside Ubuntu 18.04
tar -czvf coolpackage.tar.gz coolpackage
那么tar.gz 文件可以在 macOS 和 Ubuntu 上使用 pip 安装:
pip install coolpackage.tar.gz
但是,如果我在 macOS 中生成一个压缩包
# run inside macOS Mojave
tar -czvf coolpackage.tar.gz coolpackage
那个 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 中构建来避免这种情况,所以这不是一个直接的问题,但我不喜欢不理解 为什么 某些事情会失败。
【问题讨论】:
-
也许尝试在没有 z 选项的情况下进行 tar 然后 gzip? (可能不是问题,但易于测试)
-
tar的某些风格/方言并非完全可移植。如果您想在 Linux 上使用 BSD 版本,请尝试查找bsdtar,如果您想要 BSD 上的 Linux (GNU) 版本(包括 Darwin -> MacOS),这似乎是您的情况,请尝试查找gtar而不是tar。这可能是导致pip关闭的原因? -
@Jean-FrançoisFabre - 好主意,但遗憾的是没有奏效,我有时间会尝试 gtar!
-
当每个人都在上面玩滑翔机时,没有人在 MacOS 上遇到问题。祝你的问题好运。
-
仅供参考,使用
gtar工作 - @OndrejK。如果您想将此作为“答案”提交,我可以接受。不太令人满意,因为我不清楚为什么 BSD tar 不起作用,但这确实提供了一个解决方案,以防其他人遇到它
标签: python linux gzip tar setup.py