This message is being sent in response to your message to the Python
documentation maintainers (python-docs@python.org).  Your message will
be handled by a human, but this message serves to answer the most
common questions sent to this address.

You will only receive this message if it has not been sent to you for
at least three months.

If your question is answered below, you may not receive an additional
message from the documentation maintainers.  If you feel the answers
below are not sufficient and you do not receive an additional response
within a week, please do send a note letting us know that your
question has not been properly answered, and be specific regarding
what additional information you are looking for.


  -Fred


Frequently Asked Questions about the Python Documentation
---------------------------------------------------------

  1.  Can I download HTML/PDF/PostScript versions of the docs?
  2.  Where can I download Python?
  3.  I can't unpack a downloaded copy on Windows; what should I do?
  4.  I can't unpack a downloaded copy on MacOS; what should I do?
  5.  What can I use Python for?
  6.  How do I use module/function/whatever XXX?
  7.  What about JPython?
  8.  I found a bug in the documentation, who should I tell?
  9.  Can I get an algorithm to do THIS in language THAT?
 10.  How do I decode an XXX file from my email on a YYY computer?
 11.  Acrobat Reader won't print the PDF.  What's wrong?
 12.  Where can I find documentation in my native language?


Answers to the Questions
------------------------

  1.  Can I download HTML/PDF/PostScript/<other> versions of the docs?

      Yes.  These are available via the Web and traditional FTP.  For
      Web access to the latest version, see:

	  http://www.python.org/doc/

      For FTP access to the latest version and archives of previous
      versions, see:

          ftp.python.org:/pub/python/doc/

  2.  Where can I download Python?

      You can get Python in source form and as a Windows installer
      from the main Python website.  You can also find information
      about pre-built packages for other platforms there as well.

      Downloading information at the website is at the URL:

          http://www.python.org/download/

      The sources and Windows installer can be downloaded from the FTP
      site as well:

          ftp://ftp.python.org/pub/python/

  3.  I can't unpack a downloaded archive on Windows; what should I do?

      Make sure the archive was saved with the .tgz extension; you may 
      need to watch carefully when telling the browser where to save
      the file, as the default may change the extension to .tar or
      even .exe.

      Once you're sure the file has the right extension, use a recent
      version of WinZip to upack the file (version 7.0 works).  Get
      WinZip from:

	  http://www.winzip.com/

  4.  I can't unpack a downloaded archive on MacOS; what should I do?

      Stuffit Expander 4.5 (and probably other versions) cannot handle 
      the "tar" archive, although it can decompress it from the .tgz
      file.  Expander Enhancer, which you have to pay for, can handle
      the tar archive.

  5.  What can I use Python for?

      Python is a general purpose programming language.  See the
      Python home page at http://www.python.org/ for more information; 
      introductory material is available at:

	  http://www.python.org/doc/Intros.html

  6.  How do I use module/function/whatever XXX?

      Start by reading the documentation for XXX.  If the
      documentation doesn't make sense or seems incomplete, please
      file a specific bug report to python-docs@python.org (the
      address you sent your question to).  Otherwise, you probably
      sent your question to the wrong place (which does not preclude
      an answer, if I know it).

      If you're looking for examples or tutorial information on how to
      use a particular Python library component, check the Demo/
      directory of the source distribution or Windows installation;
      there might be an example.  If that doesn't help, point your Web
      browser to http://www.python.org/doc/ and look around; there may
      be a link to some interesting examples online.  After that, try
      searching the Python Web site at http://www.python.org/search/.

      If your question still hasn't been answered, you may send your
      query to the Python newsgroup (comp.lang.python) or the mailing
      list (see http://www.python.org/mailman/listinfo/python-list).
      If you'd rather not send you message to a public forum, you can
      try sending it to python-help@python.org.  (This is typically
      slower than sending your question to the public list, however.)

  7.  What about Jython and JPython?

      If your question is specific to Jython or JPython, you should
      consult the Jython website at:

	  http://www.jython.org/

      Chances are very good that the person who answers questions
      posted to python-docs@python.org doesn't use Jython very often, 
      and won't be able to give you a meaningful answer beyond "Look
      at the Jython website."  Sorry, I don't have *all* the answers!

  8.  I found a bug in the documentation, who should I tell?

      If you're reading this, you've found the right address!  Send
      all documentation bug reports to python-docs@python.org.  If
      you prefer to use a Web-based reporting mechanism, you can use
      the bug database at http://www.python.org/python-bugs/.

  9.  Can I get an algorithm to do THIS in language THAT?

      If THAT is Python, look in the standard library.  If THAT isn't
      Python, use your favorite Internet search engine.

 10.  How do I decode an XXX file from my email on a YYY computer?

      I really, honestly do not know.  I don't even know why this
      question gets asked here.  Since I don't have a YYY computer,
      I couldn't even try a few things out for you.

 11.  Acrobat Reader won't print the PDF.  What's wrong?

      Adobe has reportedly admitted that there is a bug Acrobat Reader
      5.0 which causes it not to print at least some PDF files
      generated by pdfTeX.  This software is used to produce the PDF
      version of the Python documentation, and our documents
      definately trigger this bug in Acrobat Reader.  To print the PDF
      files, use Acrobat Reader 4.x, ghostscript, or xpdf.

      Information on ghostscript can be found at:

          http://www.ghostscript.com/

      Information on xpdf can be found at:

          http://www.foolabs.com/xpdf/

 12.  There is a lot of contributed documentation in languages other
      than English.  Some of the documents are translations of English
      documents, and others were originally authored in other
      languages.  If we know about it, it will be listed at:

          http://www.python.org/doc/NonEnglish.html
