Home  >  Article  >  Backend Development  >  How to install python egg

How to install python egg

藏色散人
藏色散人Original
2019-07-05 09:20:5013752browse

How to install python egg

Students who are often exposed to Python may notice that when they need to install a third-party python package, the easy_install command may be used. easy_install is a command included in the setuptools package developed by PEAK (Python Enterprise Application Kit). It is used to install the egg package. The egg package is currently the most popular way to package and deploy Python applications.

How to make and install egg package? I will briefly analyze it below.

1.1 Install setuptools

First, install the setuptools tool. You can directly use apt installation under Debian/Ubuntu: :

$ sudo apt-get install python-setuptools

If you install it manually, there are two ways:

Install through the boot program ez_setup.py. This boot program will download the latest version of setuptools from the Internet for installation, and can also update the local setuptools.

$ wget http://peak.telecommunity.com/dist/ez_setup.py
$ sudo python ez_setup.py

Update setuptools::

$ sudo python ez_setup.py -U setuptools

Or download the egg package of setuptools to install. The latest version download can be viewed here. After downloading, install it through sh.

$ wget http://pypi.python.org/packages/2.6/s/setuptools/setuptools-0.6c11-py2.6.egg
$ sudo sh setuptools-0.6c11-py2.6.egg

Now you can use the easy_install command to install other egg packages.

1.2 Make your own egg package

I always install other people’s egg packages, do you also want to make your own egg package? Okay, next we will make a simple egg bag ourselves. First, create the project directory egg-demo and initialize a setup.py file:

$ mkdir egg-demo
$ cd egg-demo
$ touch setup.py
$ ls
setup.py

The following is mainly to fill in setup.py. setup.py is actually the configuration file of the python tool package distutils, and setuptools is based on distutils. Configure packaging information through the setup function in setup.py. First, we need to introduce the function setup of setuptools. The setup of setuptools is actually the setup function of distutils. Fill in setup.py with the following content:

$ cat setup.py
#!/usr/bin/env python
#-*- coding:utf-8 -*-
from setuptools import setup
setup()

At this point, an empty egg configuration file is written. We can use the following command to generate the egg package:

$ python setup.py bdist_egg

Let’s take a look at what is generated:

$ ls -F
build/ dist/ setup.py UNKNOWN.egg-info/

You can see three more folders. Under the dist folder, there is an egg file: UNKNOWN-0.0.0-py2.6.egg. Egg laying successful! Let’s first take a look at the format of this egg file:

$ file dist/UNKNOWN-0.0.0-py2.6.egg
dist/UNKNOWN-0.0.0-py2.6.egg: Zip archive data, at least v2.0 to extract

Oh, it turns out to be a zip compressed package! Okay, let’s take a look at the internal structure:

$ unzip -l dist/UNKNOWN-0.0.0-py2.6.egg
Archive:  dist/KNOWN-0.0.0-py2.6.egg
  Length      Date    Time    Name
---------  ---------- -----   ----
      120  2010-12-06 17:04   EGG-INFO/SOURCES.txt
        1  2010-12-06 17:04   EGG-INFO/top_level.txt
        1  2010-12-06 17:04   EGG-INFO/zip-safe
        1  2010-12-06 17:04   EGG-INFO/dependency_links.txt
      227  2010-12-06 17:04   EGG-INFO/PKG-INFO
---------                     -------
      350                     5 files

There is only one EGG-INFO folder, containing five egg information files, which is gone. The name of this egg is unknown, version 0.0.0. This is because we haven't set anything in the setup. Obviously, this egg can't do anything. Now add some ingredients to it. In setup.py, the setup function receives a series of properties as configuration parameters.

name name is the name of the egg package and the name of the folder to be packaged. The default is UNKNOWN.

version version number, default 0.0.0

packages Another function of setuptools, find_packages, is used here. As the name suggests, find_packages is used to package files in the specified directory.

zip_safe The default is False, so that the contents of the project file will be checked every time the egg package is generated to ensure that it is correct.

There are also some descriptive attributes, such as description, long_description, author, author_email, license, keywords, platform, url, etc. Fill in the setup.py file as follows: :

$ cat setup.py
#!/usr/bin/env python
#-*- coding:utf-8 -*-
from setuptools import setup, find_packages
setup(
        name = "demo",
        version="0.1.0",
        packages = find_packages(),
        zip_safe = False,
        description = "egg test demo.",
        long_description = "egg test demo, haha.",
        author = "amoblin",
        author_email = "amoblin@ossxp.com",
        license = "GPL",
        keywords = ("test", "egg"),
        platforms = "Independant",
        url = "",
        )

Create a directory demo with the same name as the above name in the egg-demo directory, and write the __init__.py file in the demo directory:

$ mkdir demo
$ cat demo/__init__.py
#!/usr/bin/env python
#-*- coding:utf-8 -*-
def test():
    print "Hello, I'm amoblin."
if __name__ == '__main__':
    test()

Generate again After the egg package, check the egg package information:

$ python setup.py bdist_egg
$ unzip -l dist/demo-0.1.0-py2.6.egg
Archive:  dist/demo-0.1.0-py2.6.egg
  Length      Date    Time    Name
---------  ---------- -----   ----
      121  2010-12-06 17:30   demo/__init__.py
      344  2010-12-06 17:46   demo/__init__.pyc
      137  2010-12-06 17:46   EGG-INFO/SOURCES.txt
        5  2010-12-06 17:46   EGG-INFO/top_level.txt
        1  2010-12-06 17:46   EGG-INFO/zip-safe
        1  2010-12-06 17:46   EGG-INFO/dependency_links.txt
      227  2010-12-06 17:46   EGG-INFO/PKG-INFO
---------                     -------
      836                     7 files

You can see that there is an additional folder demo, which contains the __init__.py we wrote. Adhering to the agile principle, install it first and experience it before saying:

$ sudo python setup.py install
running install
install_dir /usr/local/lib/python2.6/dist-packages/
...
creating /usr/local/lib/python2.6/dist-packages/demo-0.1.0-py2.6.egg
Extracting demo-0.1.0-py2.6.egg to /usr/local/lib/python2.6/dist-packages
demo 0.1.0 is already the active version in easy-install.pth
Installed /usr/local/lib/python2.6/dist-packages/demo-0.1.0-py2.6.egg
Processing dependencies for demo==0.1.0
Finished processing dependencies for demo==0.1.0

OK! Installation completed! Next we can use it directly through import!

$ python -c "from demo import test;test()"
Hello, I'm amoblin.

Successful output! This means the installation is correct. One of our egg bags was born. Normally, our source programs are placed in the src directory, so next we move the demo folder to src. But this also requires modifying the setup.py file, modifying the parameter in the find_packages function to 'src', and adding the package_dir parameter:

packages=find_packages('src'),
package_dir = {'':'src'}

This tells setuptools to look for packages in the src directory instead of the original default project root directory. .

1.3 Egg file uninstallation

Taking the python2.6 version as an example, the egg file is generally installed in the /usr/local/lib/python2.6/dist-packages/ directory. There is also an easy-install.pth file used to store the installed egg information. :

$ cd /usr/local/lib/python2.6/dist-packages
$ cat easy-install.pth|grep demo
./demo-0.1.0-py2.6.egg
$ ls -F|grep demo
demo-0.1.0-py2.6.egg/

Uninstalling the egg file is very simple, first delete the line containing this egg from easy-install.pth, and then delete the egg folder.

Related recommendations: "Python Tutorial"

The above is the detailed content of How to install python egg. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn