【问题标题】:How can I wrap my python module in a tar?如何将我的 python 模块包装在 tar 中?
【发布时间】:2016-07-05 20:02:46
【问题描述】:

我创建了一个简单的__main__.py

if __name__ == '__main__':
    print 'the rain in Spain falls mainly on the plane'

我可以使用命令zip -r test.zip __main__.py 创建一个带有__main__.py 的zip

现在我可以调用 test.zip:

$ python test.zip
the rain in spain falls mainly on the plane

当我使用命令tar -cf test.tar __main__.py 创建带有__main__.py 的tar 时

当我调用它时,我得到以下信息。

$python test.tar
File "test.tar", line 1
  __main__.py    print 'the rain in spain falls mainly on the plane'
                     ^
SyntaxError: invalid syntax

我需要做什么才能让 python 像 zip 一样识别它?

【问题讨论】:

  • 在 Python 3 中,print 是一个函数,而不是关键字
  • 谢谢,我知道,但我使用的是 python 2.7
  • 那么,这是一个奇怪的 Python 3 错误。
  • 我不相信python 已经为 tar 文件创建了导入模块。尝试阅读 zip 的导入模块并为 tar 创建一个导入模块。

标签: python-2.7


【解决方案1】:

我认为您不能将 tar 用作 Python。我从未听说过能够运行压缩的 Python 文件,但没关系。

这是您的 tar 文件:

00000000: 7465 7374 5f74 6172 2e70 7900 0000 0000  test_tar.py.....
00000010: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000020: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000030: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000040: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000050: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000060: 0000 0000 3030 3030 3634 3400 3030 3031  ....0000644.0001
00000070: 3735 3000 3030 3031 3735 3000 3030 3030  750.0001750.0000
00000080: 3030 3030 3132 3400 3132 3733 3730 3137  0000124.12737017
00000090: 3634 3600 3031 3133 3637 0020 3000 0000  646.011367. 0...
000000a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000000b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000000c0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000000d0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000000e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000000f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000100: 0075 7374 6172 2020 0063 6174 0000 0000  .ustar  .cat....
00000110: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000120: 0000 0000 0000 0000 0063 6174 0000 0000  .........cat....
00000130: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000140: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000150: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000160: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000170: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000180: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000190: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000001a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000001b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000001c0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000001d0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000001e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000001f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000200: 6966 205f 5f6e 616d 655f 5f20 3d3d 2027  if __name__ == '
00000210: 5f5f 6d61 696e 5f5f 273a 0a20 2020 2070  __main__':.    p
00000220: 7269 6e74 2027 7468 6520 7261 696e 2069  rint 'the rain i
00000230: 6e20 5370 6169 6e20 6661 6c6c 7320 6d61  n Spain falls ma
00000240: 696e 6c79 206f 6e20 7468 6520 706c 616e  inly on the plan
00000250: 6527 0a0a 0000 0000 0000 0000 0000 0000  e'..............
00000260: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000270: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000280: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000290: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000002a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000002b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000002c0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000002d0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000002e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000002f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000300: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000310: 0000 0000 0000 0000 0000 0000 0000 0000  ................

它以大约 9K 的空字节结尾,所以这只是 xxd 的前 50 行,但它不是有效的语法。

它会找到文件名,然后是许多奇怪的不可打印字符,然后是 printtest_tar.py 看起来像一个模块名称(和返回值的语句),所以没关系。但是

test_tar.py print 'blah' 

根本不是有效的 Python。

【讨论】:

  • 仅供参考。 python.org/dev/peps/pep-0273 添加了从 zip 导入的功能。我的 test.zip 的 xxd 看起来比我的 tar 的 xxd 还要糟糕。我可以用一种使它看起来类似于 python 的方式对其进行 tar 处理吗?
  • @Bamcclur 正如 alvitis 在 cmets 中所说的那样,我认为还没有一个模块,所以还没有,没有。
猜你喜欢
  • 2017-01-21
  • 1970-01-01
  • 2012-10-03
  • 2018-05-22
  • 1970-01-01
  • 1970-01-01
  • 2013-11-05
  • 2012-05-05
  • 2019-07-11
相关资源
最近更新 更多