Frage

my environment

windows 7

python 2.7

PyScripter

google-api-python-client 1.2

I tried to use a sample for "Search by keyword" from youtube data api

from apiclient.discovery import build
from apiclient.errors import HttpError
from oauth2client.tools import argparser


# Set DEVELOPER_KEY to the API key value from the APIs & auth > Registered apps
# tab of
#   https://cloud.google.com/console
# Please ensure that you have enabled the YouTube Data API for your project.
DEVELOPER_KEY = "REPLACE_ME"
YOUTUBE_API_SERVICE_NAME = "youtube"
YOUTUBE_API_VERSION = "v3"

def youtube_search(options):
  youtube = build(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION,
    developerKey = DEVELOPER_KEY)

  # Call the search.list method to retrieve results matching the specified
  # query term.
  search_response = youtube.search().list(
    q=options.q,
    part="id,snippet",
    maxResults=options.max_results
  ).execute()

  videos = []
  channels = []
  playlists = []

  # Add each result to the appropriate list, and then display the lists of
  # matching videos, channels, and playlists.
  for search_result in search_response.get("items", []):
    if search_result["id"]["kind"] == "youtube#video":
      videos.append("%s (%s)" % (search_result["snippet"]["title"],
                                 search_result["id"]["videoId"]))
    elif search_result["id"]["kind"] == "youtube#channel":
      channels.append("%s (%s)" % (search_result["snippet"]["title"],
                                   search_result["id"]["channelId"]))
    elif search_result["id"]["kind"] == "youtube#playlist":
      playlists.append("%s (%s)" % (search_result["snippet"]["title"],
                                    search_result["id"]["playlistId"]))

  print "Videos:\n", "\n".join(videos), "\n"
  print "Channels:\n", "\n".join(channels), "\n"
  print "Playlists:\n", "\n".join(playlists), "\n"


if __name__ == "__main__":
  argparser.add_argument("--q", help="Search term", default="Google")
  argparser.add_argument("--max-results", help="Max results", default=25)
  args = argparser.parse_args()

  try:
    youtube_search(args)
  except HttpError, e:
    print "An HTTP error %d occurred:\n%s" % (e.resp.status, e.content)

in normal time, running the source code it is all working fine

but when I use py2exe and pyinstall package .py and then run EXE always error like this:

Traceback (most recent call last):
  File "searchvideo.py", line 133, in <module>
    youtube_search(SEARCH_STRING[keylist])
  File "searchvideo.py", line 41, in youtube_search
    developerKey=DEVELOPER_KEY)
  File "oauth2client\util.pyc", line 132, in positional_wrapper
  File "apiclient\discovery.pyc", line 192, in build
  File "httplib2\__init__.pyc", line 1570, in request
  File "httplib2\__init__.pyc", line 1317, in _request
  File "httplib2\__init__.pyc", line 1252, in _conn_request
  File "httplib2\__init__.pyc", line 1021, in connect
  File "httplib2\__init__.pyc", line 80, in _ssl_wrap_socket
  File "ssl.pyc", line 387, in wrap_socket
  File "ssl.pyc", line 141, in __init__
ssl.SSLError: [Errno 185090050] _ssl.c:343: error:0B084002:x509 certificate rout
ines:X509_load_cert_crl_file:system lib

py2exe setup.py

from distutils.core import setup
import py2exe

setup(
    console=['searchvideo.py'],
    data_files=['cacert.pem', 'cacerts.txt']
)
War es hilfreich?

Lösung

If your trying to generate an executable that uses packages like httplib2 you may want to include the ca_certs with your executable.

So, in the build_exe options include this:

    {"include_files": ['path_to_your_ca_certs_file'],}

And remember to modify the ca_certs path in your code, for example:

    httplib2.Http(ca_certs='path_to_your_ca_certs_file_in_the_executable_package')
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top