可安装的Python tar.gz软件包取决于用于构建tarball的操作系统

问题描述 投票:1回答:2

我最近遇到了一个奇怪的情况,我想将我的(正确格式化的)Python软件包coolpackage转换为tarball,以便向某些同事进行简单分发,但是生成的tarball的有效性取决于生成它的OS。

对于上下文,可以在macOS和Ubuntu Linux上通过coolpackage从源目录安装pip,没有问题:

cd coolpackage
pip install .

这在macOS和Linux上均有效,并且在两种情况下都在conda环境中运行,这些环境在软件包方面是相同的。

现在,如果我在Ubuntu中生成了tarball

# run inside Ubuntu 18.04
tar -czvf coolpackage.tar.gz coolpackage

然后可以在MacOS和Ubuntu上使用pip安装tar.gz文件:

pip install coolpackage.tar.gz

但是,如果我在macOS中生成了压缩包

# 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中进行构建来避免这种情况,所以这不是一个直接的问题,但是我不喜欢不理解why某些操作失败。

python linux gzip tar setup.py
2个回答
1
投票

tar的各种方言/风味大体相似。在这种情况下,我们正在研究Linux系统上常用的GNU工具和BSD上使用的BSD工具(-> Darwin-> MacOS X)。


0
投票

由于您正在使用Python,那么为什么不直接从其标准库中使用python -m tarfilepython -m tarfile?它应该足够便携。

© www.soinside.com 2019 - 2024. All rights reserved.