当我运行 setuptools .egg “就好像它是一个 shell 脚本"时,实际发生了什么? [英] When I run the setuptools .egg "as if it were a shell script", what's actually happening?

查看:81
本文介绍了当我运行 setuptools .egg “就好像它是一个 shell 脚本"时,实际发生了什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

通过阅读本文档,我已经建立了命令 sh setuptools-0.6c11-py2.7.egg 实际作用的心智模型,但它非常不完整,我仍然对一些方面感到困惑.

我的心智模型是这样的:

  1. 当这个命令发出时,egg(我认为它是一种巧妙地处理依赖关系的 zip 文件)以某种方式在我的系统上找到正确版本的 python,并使用该 python,安装自己"到合适的位置.
  2. 在实践中,这意味着一个名为 easy_install 的Unix 可执行文件"创建在一个希望在我的路径上的目录中.这就是为什么我之后可以在终端中输入 easy_install somepackage.

因此我的问题是:

  1. 鸡蛋"如何能够以这种方式自行安装"?当其他蛋需要 easy_install 才能工作时,为什么这对这个蛋特别有效?
  2. 这样创建的Unix 可执行文件"是 4kb.它究竟是什么?是否充满了对其他事物的调用?他们在哪里?

这不是一个如何让它发挥作用"的问题 - 我在这个轴上没有任何问题,但我想完全理解这里发生的事情.

解决方案

Egg 文件是简单的 zip 压缩目录,其中包含 Python 包、模块和少量元数据,带有 .egg 扩展名.>

zip 格式灵活;它会忽略文件开头的任何不是 zipfile 的一部分.通过查找一系列字符(PK 和另外两个指示类型的字节)并从那里读取来检测 zipfile.

这意味着您可以在 zip 的前面放一些东西.setuptools 蛋的特殊之处在于它们使用这个技巧在 zip 数据之前插入一些 shell 脚本:

$ head -n8 setuptools-0.6c11-py2.7.egg#!/bin/shif [`basename $0` = "setuptools-0.6c11-py2.7.egg"]然后 exec python2.7 -c "import sys, os; sys.path.insert(0, os.path.abspath('$0')); from setuptools.command.easy_install import bootstrap; sys.exit(bootstrap())" "$@"别的echo $0 不是这个egg 文件的正确名称.echo 请将其重命名回 setuptools-0.6c11-py2.7.egg 并重试.执行错误菲

经过前 8 行,这是一个真正的 zip:

$ tail -n+9 setuptools-0.6c11-py2.7.egg |文件 -/dev/stdin:压缩存档数据,至少要解压 v2.0

前 8 行中包含的脚本是您运行 sh setuptools-0.6c11-py2.7.egg 时正在执行的脚本.

如您所见,该脚本特定于 egg 版本;这在python 2.7的版本中,它只是使用python解释器将这个egg添加到python搜索路径中.然后它从包含的 python 模块中导入一个函数并运行它.

这是鸡蛋本身的内容,正如我提到的只是一个 zip 存档:

$ zipinfo -l setuptools-0.6c11-py2.7.egg存档:setuptools-0.6c11-py2.7.egg 332005 字节 78 个文件-rw-rw-r-- 2.0 unx 1713 b-995 defN 7-Jul-10 20:26 site.pyc-rw-rw-r-- 2.0 unx 90113 b-31461 defN 7-Jul-10 20:26 pkg_resources.pyc-rw-rw-r-- 2.0 unx 85435 b-23537 defN 19-Oct-09 13:35 pkg_resources.py-rw-rw-r-- 2.0 unx 2362 b-875 defN 20-Sep-06 17:05 site.py-rw-rw-r-- 2.0 unx 309 b-224 defN 7-Jul-10 20:26 easy_install.pyc-rw-rw-r-- 2.0 unx 126 b- 105 defN 20-Sep-06 17:05 easy_install.py-rw-rw-r-- 2.0 unx 43 b- 43 defN 7-Jul-10 20:26 EGG-INFO/top_level.txt-rw-rw-r-- 2.0 unx 1591 b-458 defN 7-Jul-10 20:26 EGG-INFO/SOURCES.txt-rw-rw-r-- 2.0 unx 1 b- 3 defN 20-Oct-09 10:07 EGG-INFO/zip-safe-rw-rw-r-- 2.0 unx 9278 b-3194 defN 7-Jul-10 20:26 EGG-INFO/PKG-INFO-rwxrwxr-x 2.0 unx 2504 b-623 defN 7-Jul-10 20:26 EGG-INFO/entry_points.txt-rw-rw-r-- 2.0 unx 1 b- 3 defN 7-Jul-10 20:26 EGG-INFO/dependency_links.txt-rw-rw-r-- 2.0 unx 1567 b-791 defN 7-Jul-10 20:26 setuptools/extension.pyc-rw-rw-r-- 2.0 unx 1089 b-424 defN 20-Sep-06 17:05 setuptools/extension.py-rw-rw-r-- 2.0 unx 10796 b-4050 defN 7-Jul-10 20:26 setuptools/sandbox.pyc-rw-rw-r-- 2.0 unx 8227 b-2309 defN 6-Jul-10 20:09 setuptools/sandbox.py-rw-rw-r-- 2.0 unx 5677 b-2499 defN 7-Jul-10 20:26 setuptools/archive_util.pyc-rw-rw-r-- 2.0 unx 26800 b-11228 defN 7-Jul-10 20:26 setuptools/package_index.pyc-rw-rw-r-- 2.0 unx 6209 b-2229 defN 19-Oct-09 13:35 setuptools/depends.py-rw-rw-r-- 2.0 unx 6677 b-3096 defN 7-Jul-10 20:26 setuptools/depends.pyc-rw-rw-r-- 2.0 unx 2816 b-1159 defN 6-Jul-10 20:09 setuptools/__init__.py-rw-rw-r-- 2.0 unx 3639 b-1837 defN 7-Jul-10 20:26 setuptools/__init__.pyc-rw-rw-r-- 2.0 unx 5924 b-1777 defN 19-Oct-09 13:35 setuptools/archive_util.py-rw-rw-r-- 2.0 unx 29972 b-8156 defN 19-Oct-09 13:35 setuptools/dist.py-rwxrwxr-x 2.0 unx 7168 b-3249 defN 19-Oct-09 17:18 setuptools/cli.exe-rw-rw-r-- 2.0 unx 28275 b-8698 defN 6-Jul-10 20:09 setuptools/package_index.py-rw-rw-r-- 2.0 unx 29786 b-10953 defN 7-Jul-10 20:26 setuptools/dist.pyc-rwxrwxr-x 2.0 unx 7168 b-3244 defN 19-Oct-09 17:18 setuptools/gui.exe-rw-rw-r-- 2.0 unx 22219 b-7042 defN 7-Jul-10 20:26 setuptools/tests/test_resources.pyc-rw-rw-r-- 2.0 unx 19388 b-4723 defN 24-Sep-08 13:10 setuptools/tests/test_resources.py-rw-rw-r-- 2.0 unx 12345 b-2765 defN 24-Sep-08 13:10 setuptools/tests/__init__.py-rw-rw-r-- 2.0 unx 13811 b-4523 defN 7-Jul-10 20:26 setuptools/tests/__init__.pyc-rw-rw-r-- 2.0 unx 1499 b-708 defN 7-Jul-10 20:26 setuptools/tests/test_packageindex.pyc-rw-rw-r-- 2.0 unx 81351 b-27171 defN 7-Jul-10 20:26 setuptools/tests/doctest.pyc-rw-rw-r-- 2.0 unx 759 b-346 defN 24-Sep-08 13:10 setuptools/tests/test_packageindex.py-rw-rw-r-- 2.0 unx 99714 b-25663 defN 20-Sep-06 17:05 setuptools/tests/doctest.py-rw-rw-r-- 2.0 unx 2866 b-1332 defN 7-Jul-10 20:26 setuptools/command/rotate.pyc-rw-rw-r-- 2.0 unx 11520 b-3127 defN 19-Oct-09 13:35 setuptools/command/build_ext.py-rw-rw-r-- 2.0 unx 6649 b-2208 defN 24-Sep-08 13:10 setuptools/command/upload.py-rw-rw-r-- 2.0 unx 8162 b-3538 defN 7-Jul-10 20:26 setuptools/command/sdist.pyc-rw-rw-r-- 2.0 unx 5965 b-2421 defN 7-Jul-10 20:26 setuptools/command/setopt.pyc-rw-rw-r-- 2.0 unx 2283 b-695 defN 19-Oct-09 17:50 setuptools/command/bdist_wininst.py-rw-rw-r-- 2.0 unx 7535 b-3208 defN 7-Jul-10 20:26 setuptools/command/build_py.pyc-rw-rw-r-- 2.0 unx 3690 b-1528 defN 7-Jul-10 20:26 setuptools/command/install.pyc-rw-rw-r-- 2.0 unx 14205 b-4465 defN 19-Oct-09 13:35 setuptools/command/egg_info.py-rw-rw-r-- 2.0 unx 626 b-311 defN 28-Dec-06 19:52 setuptools/command/__init__.py-rw-rw-r-- 2.0 unx 839 b-494 defN 7-Jul-10 20:26 setuptools/command/__init__.pyc-rw-rw-r-- 2.0 unx 5053 b-1519 defN 20-Sep-06 17:05 setuptools/command/setopt.py-rw-rw-r-- 2.0 unx 674 b-329 defN 7-Jul-10 20:26 setuptools/command/register.pyc-rw-rw-r-- 2.0 unx 3724 b-1292 defN 4-Sep-07 00:11 setuptools/command/install_egg_info.py-rw-rw-r-- 2.0 unx 18005 b-5444 defN 19-Oct-09 13:35 setuptools/command/bdist_egg.py-rw-rw-r-- 2.0 unx 3984 b-1385 defN 15-Feb-08 12:29 setuptools/command/install.py-rw-rw-r-- 2.0 unx 2356 b-1002 defN 7-Jul-10 20:26 setuptools/command/bdist_wininst.pyc-rw-rw-r-- 2.0 unx 2025 b-774 defN 22-May-07 17:55 setuptools/command/bdist_rpm.py-rw-rw-r-- 2.0 unx 2486 b-871 defN 20-Sep-06 17:05 setuptools/command/install_lib.py-rw-rw-r-- 2.0 unx 740 b-357 defN 20-Sep-06 17:05 setuptools/command/saveopts.py-rw-rw-r-- 2.0 unx 56980 b-23198 defN 7-Jul-10 20:26 setuptools/command/easy_install.pyc-rw-rw-r-- 2.0 unx 3172 b-1438 defN 7-Jul-10 20:26 setuptools/command/install_lib.pyc-rw-rw-r-- 2.0 unx 2257 b-1013 defN 7-Jul-10 20:26 setuptools/command/bdist_rpm.pyc-rw-rw-r-- 2.0 unx 5310 b-1732 defN 15-Feb-08 12:29 setuptools/command/develop.py-rw-rw-r-- 2.0 unx 5091 b-2222 defN 7-Jul-10 20:26 setuptools/command/test.pyc-rw-rw-r-- 2.0 unx 63580 b-17507 defN 19-Oct-09 13:35 setuptools/command/easy_install.py-rw-rw-r-- 2.0 unx 16467 b-6544 defN 7-Jul-10 20:26 setuptools/command/egg_info.pyc-rw-rw-r-- 2.0 unx 4577 b-1994 defN 7-Jul-10 20:26 setuptools/command/install_egg_info.pyc-rw-rw-r-- 2.0 unx 6275 b-3108 defN 7-Jul-10 20:26 setuptools/command/upload.pyc-rw-rw-r-- 2.0 unx 7246 b-2237 defN 20-Sep-06 17:05 setuptools/command/build_py.py-rw-rw-r-- 2.0 unx 10073 b-4314 defN 7-Jul-10 20:26 setuptools/command/build_ext.pyc-rw-rw-r-- 2.0 unx 3185 b-1463 defN 7-Jul-10 20:26 setuptools/command/alias.pyc-rw-rw-r-- 2.0 unx 1921 b-704 defN 15-Feb-08 12:29 setuptools/command/install_scripts.py-rw-rw-r-- 2.0 unx 7327 b-2380 defN 19-Oct-09 15:46 setuptools/command/sdist.py-rw-rw-r-- 2.0 unx 1249 b-647 defN 7-Jul-10 20:26 setuptools/command/saveopts.pyc-rw-rw-r-- 2.0 unx 2021 b-750 defN 20-Sep-06 17:05 setuptools/command/rotate.py-rw-rw-r-- 2.0 unx 2477 b-848 defN 19-Oct-09 13:35 setuptools/command/alias.py-rw-rw-r-- 2.0 unx 17695 b-7800 defN 7-Jul-10 20:26 setuptools/command/bdist_egg.pyc-rw-rw-r-- 2.0 unx 277 b-158 defN 20-Sep-06 17:05 setuptools/command/register.py-rw-rw-r-- 2.0 unx 4442 b-1424 defN 15-Feb-08 12:29 setuptools/command/test.py-rw-rw-r-- 2.0 unx 2445 b-1160 defN 7-Jul-10 20:26 setuptools/command/install_scripts.pyc-rw-rw-r-- 2.0 unx 5175 b-2317 defN 7-Jul-10 20:26 setuptools/command/develop.pyc78 个文件,958981 字节未压缩,321419 字节压缩:66.5%

From reading this documentation, I've built a mental model of what the command sh setuptools-0.6c11-py2.7.eggactually does, but it's very incomplete and I'm still mystified by a few aspects.

My mental model goes something like this:

  1. When this command is issued, the egg (which I'd considered as a sort of zip file that handles dependencies cleverly) somehow finds the right version of python on my system, and using that python, "installs itself" to an appropriate location.
  2. In practice this means that a 'Unix Executable File' called easy_install is created in a directory that's hopefully on my path. This is why I can just type easy_install somepackage in the terminal afterwards.

My questions are therefore:

  1. How is an 'egg' able to "install itself" in this way? Why does this work for this egg in particular, when other eggs require easy_install to work?
  2. The 'Unix Executable File' thus created is 4kb. What actually is it? Is it full of calls to other things? Where are they?

This isn't a 'how to get it working' question - I'm not having any problems along that axis, but I'd like to fully grok what's going on here.

解决方案

Egg files are simply zip-compressed directories containing Python packages, modules and a little metadata, with a .egg extension.

The zip format is flexible; it will ignore anything at the start of the file that isn't part of the zipfile. The zipfile is detected by finding a series of characters (PK and two more bytes indicating the type) and reading from there.

This means you can put something in front of the zip. The setuptools eggs are special in that they use this trick to insert some shell script before the zip data:

$ head -n8 setuptools-0.6c11-py2.7.egg 
#!/bin/sh
if [ `basename $0` = "setuptools-0.6c11-py2.7.egg" ]
then exec python2.7 -c "import sys, os; sys.path.insert(0, os.path.abspath('$0')); from setuptools.command.easy_install import bootstrap; sys.exit(bootstrap())" "$@"
else
  echo $0 is not the correct name for this egg file.
  echo Please rename it back to setuptools-0.6c11-py2.7.egg and try again.
  exec false
fi

Past those first 8 lines, it's a genuine zip:

$ tail -n+9 setuptools-0.6c11-py2.7.egg | file -
/dev/stdin: Zip archive data, at least v2.0 to extract

The script contained in those first 8 lines is what is being executed when you run sh setuptools-0.6c11-py2.7.egg.

As you can see, the script is specific to the egg version; this in the version for python 2.7, and it simply uses the python interpreter to add this egg to the python search path. It then imports a function from the contained python module and runs it.

Here are the contents of the egg itself, which is as I mentioned just a zip archive:

$ zipinfo -l setuptools-0.6c11-py2.7.egg 
Archive:  setuptools-0.6c11-py2.7.egg   332005 bytes   78 files
-rw-rw-r--  2.0 unx     1713 b-      995 defN  7-Jul-10 20:26 site.pyc
-rw-rw-r--  2.0 unx    90113 b-    31461 defN  7-Jul-10 20:26 pkg_resources.pyc
-rw-rw-r--  2.0 unx    85435 b-    23537 defN 19-Oct-09 13:35 pkg_resources.py
-rw-rw-r--  2.0 unx     2362 b-      875 defN 20-Sep-06 17:05 site.py
-rw-rw-r--  2.0 unx      309 b-      224 defN  7-Jul-10 20:26 easy_install.pyc
-rw-rw-r--  2.0 unx      126 b-      105 defN 20-Sep-06 17:05 easy_install.py
-rw-rw-r--  2.0 unx       43 b-       43 defN  7-Jul-10 20:26 EGG-INFO/top_level.txt
-rw-rw-r--  2.0 unx     1591 b-      458 defN  7-Jul-10 20:26 EGG-INFO/SOURCES.txt
-rw-rw-r--  2.0 unx        1 b-        3 defN 20-Oct-09 10:07 EGG-INFO/zip-safe
-rw-rw-r--  2.0 unx     9278 b-     3194 defN  7-Jul-10 20:26 EGG-INFO/PKG-INFO
-rwxrwxr-x  2.0 unx     2504 b-      623 defN  7-Jul-10 20:26 EGG-INFO/entry_points.txt
-rw-rw-r--  2.0 unx        1 b-        3 defN  7-Jul-10 20:26 EGG-INFO/dependency_links.txt
-rw-rw-r--  2.0 unx     1567 b-      791 defN  7-Jul-10 20:26 setuptools/extension.pyc
-rw-rw-r--  2.0 unx     1089 b-      424 defN 20-Sep-06 17:05 setuptools/extension.py
-rw-rw-r--  2.0 unx    10796 b-     4050 defN  7-Jul-10 20:26 setuptools/sandbox.pyc
-rw-rw-r--  2.0 unx     8227 b-     2309 defN  6-Jul-10 20:09 setuptools/sandbox.py
-rw-rw-r--  2.0 unx     5677 b-     2499 defN  7-Jul-10 20:26 setuptools/archive_util.pyc
-rw-rw-r--  2.0 unx    26800 b-    11228 defN  7-Jul-10 20:26 setuptools/package_index.pyc
-rw-rw-r--  2.0 unx     6209 b-     2229 defN 19-Oct-09 13:35 setuptools/depends.py
-rw-rw-r--  2.0 unx     6677 b-     3096 defN  7-Jul-10 20:26 setuptools/depends.pyc
-rw-rw-r--  2.0 unx     2816 b-     1159 defN  6-Jul-10 20:09 setuptools/__init__.py
-rw-rw-r--  2.0 unx     3639 b-     1837 defN  7-Jul-10 20:26 setuptools/__init__.pyc
-rw-rw-r--  2.0 unx     5924 b-     1777 defN 19-Oct-09 13:35 setuptools/archive_util.py
-rw-rw-r--  2.0 unx    29972 b-     8156 defN 19-Oct-09 13:35 setuptools/dist.py
-rwxrwxr-x  2.0 unx     7168 b-     3249 defN 19-Oct-09 17:18 setuptools/cli.exe
-rw-rw-r--  2.0 unx    28275 b-     8698 defN  6-Jul-10 20:09 setuptools/package_index.py
-rw-rw-r--  2.0 unx    29786 b-    10953 defN  7-Jul-10 20:26 setuptools/dist.pyc
-rwxrwxr-x  2.0 unx     7168 b-     3244 defN 19-Oct-09 17:18 setuptools/gui.exe
-rw-rw-r--  2.0 unx    22219 b-     7042 defN  7-Jul-10 20:26 setuptools/tests/test_resources.pyc
-rw-rw-r--  2.0 unx    19388 b-     4723 defN 24-Sep-08 13:10 setuptools/tests/test_resources.py
-rw-rw-r--  2.0 unx    12345 b-     2765 defN 24-Sep-08 13:10 setuptools/tests/__init__.py
-rw-rw-r--  2.0 unx    13811 b-     4523 defN  7-Jul-10 20:26 setuptools/tests/__init__.pyc
-rw-rw-r--  2.0 unx     1499 b-      708 defN  7-Jul-10 20:26 setuptools/tests/test_packageindex.pyc
-rw-rw-r--  2.0 unx    81351 b-    27171 defN  7-Jul-10 20:26 setuptools/tests/doctest.pyc
-rw-rw-r--  2.0 unx      759 b-      346 defN 24-Sep-08 13:10 setuptools/tests/test_packageindex.py
-rw-rw-r--  2.0 unx    99714 b-    25663 defN 20-Sep-06 17:05 setuptools/tests/doctest.py
-rw-rw-r--  2.0 unx     2866 b-     1332 defN  7-Jul-10 20:26 setuptools/command/rotate.pyc
-rw-rw-r--  2.0 unx    11520 b-     3127 defN 19-Oct-09 13:35 setuptools/command/build_ext.py
-rw-rw-r--  2.0 unx     6649 b-     2208 defN 24-Sep-08 13:10 setuptools/command/upload.py
-rw-rw-r--  2.0 unx     8162 b-     3538 defN  7-Jul-10 20:26 setuptools/command/sdist.pyc
-rw-rw-r--  2.0 unx     5965 b-     2421 defN  7-Jul-10 20:26 setuptools/command/setopt.pyc
-rw-rw-r--  2.0 unx     2283 b-      695 defN 19-Oct-09 17:50 setuptools/command/bdist_wininst.py
-rw-rw-r--  2.0 unx     7535 b-     3208 defN  7-Jul-10 20:26 setuptools/command/build_py.pyc
-rw-rw-r--  2.0 unx     3690 b-     1528 defN  7-Jul-10 20:26 setuptools/command/install.pyc
-rw-rw-r--  2.0 unx    14205 b-     4465 defN 19-Oct-09 13:35 setuptools/command/egg_info.py
-rw-rw-r--  2.0 unx      626 b-      311 defN 28-Dec-06 19:52 setuptools/command/__init__.py
-rw-rw-r--  2.0 unx      839 b-      494 defN  7-Jul-10 20:26 setuptools/command/__init__.pyc
-rw-rw-r--  2.0 unx     5053 b-     1519 defN 20-Sep-06 17:05 setuptools/command/setopt.py
-rw-rw-r--  2.0 unx      674 b-      329 defN  7-Jul-10 20:26 setuptools/command/register.pyc
-rw-rw-r--  2.0 unx     3724 b-     1292 defN  4-Sep-07 00:11 setuptools/command/install_egg_info.py
-rw-rw-r--  2.0 unx    18005 b-     5444 defN 19-Oct-09 13:35 setuptools/command/bdist_egg.py
-rw-rw-r--  2.0 unx     3984 b-     1385 defN 15-Feb-08 12:29 setuptools/command/install.py
-rw-rw-r--  2.0 unx     2356 b-     1002 defN  7-Jul-10 20:26 setuptools/command/bdist_wininst.pyc
-rw-rw-r--  2.0 unx     2025 b-      774 defN 22-May-07 17:55 setuptools/command/bdist_rpm.py
-rw-rw-r--  2.0 unx     2486 b-      871 defN 20-Sep-06 17:05 setuptools/command/install_lib.py
-rw-rw-r--  2.0 unx      740 b-      357 defN 20-Sep-06 17:05 setuptools/command/saveopts.py
-rw-rw-r--  2.0 unx    56980 b-    23198 defN  7-Jul-10 20:26 setuptools/command/easy_install.pyc
-rw-rw-r--  2.0 unx     3172 b-     1438 defN  7-Jul-10 20:26 setuptools/command/install_lib.pyc
-rw-rw-r--  2.0 unx     2257 b-     1013 defN  7-Jul-10 20:26 setuptools/command/bdist_rpm.pyc
-rw-rw-r--  2.0 unx     5310 b-     1732 defN 15-Feb-08 12:29 setuptools/command/develop.py
-rw-rw-r--  2.0 unx     5091 b-     2222 defN  7-Jul-10 20:26 setuptools/command/test.pyc
-rw-rw-r--  2.0 unx    63580 b-    17507 defN 19-Oct-09 13:35 setuptools/command/easy_install.py
-rw-rw-r--  2.0 unx    16467 b-     6544 defN  7-Jul-10 20:26 setuptools/command/egg_info.pyc
-rw-rw-r--  2.0 unx     4577 b-     1994 defN  7-Jul-10 20:26 setuptools/command/install_egg_info.pyc
-rw-rw-r--  2.0 unx     6275 b-     3108 defN  7-Jul-10 20:26 setuptools/command/upload.pyc
-rw-rw-r--  2.0 unx     7246 b-     2237 defN 20-Sep-06 17:05 setuptools/command/build_py.py
-rw-rw-r--  2.0 unx    10073 b-     4314 defN  7-Jul-10 20:26 setuptools/command/build_ext.pyc
-rw-rw-r--  2.0 unx     3185 b-     1463 defN  7-Jul-10 20:26 setuptools/command/alias.pyc
-rw-rw-r--  2.0 unx     1921 b-      704 defN 15-Feb-08 12:29 setuptools/command/install_scripts.py
-rw-rw-r--  2.0 unx     7327 b-     2380 defN 19-Oct-09 15:46 setuptools/command/sdist.py
-rw-rw-r--  2.0 unx     1249 b-      647 defN  7-Jul-10 20:26 setuptools/command/saveopts.pyc
-rw-rw-r--  2.0 unx     2021 b-      750 defN 20-Sep-06 17:05 setuptools/command/rotate.py
-rw-rw-r--  2.0 unx     2477 b-      848 defN 19-Oct-09 13:35 setuptools/command/alias.py
-rw-rw-r--  2.0 unx    17695 b-     7800 defN  7-Jul-10 20:26 setuptools/command/bdist_egg.pyc
-rw-rw-r--  2.0 unx      277 b-      158 defN 20-Sep-06 17:05 setuptools/command/register.py
-rw-rw-r--  2.0 unx     4442 b-     1424 defN 15-Feb-08 12:29 setuptools/command/test.py
-rw-rw-r--  2.0 unx     2445 b-     1160 defN  7-Jul-10 20:26 setuptools/command/install_scripts.pyc
-rw-rw-r--  2.0 unx     5175 b-     2317 defN  7-Jul-10 20:26 setuptools/command/develop.pyc
78 files, 958981 bytes uncompressed, 321419 bytes compressed:  66.5%

这篇关于当我运行 setuptools .egg “就好像它是一个 shell 脚本"时,实际发生了什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆