cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
mavsuperman
New Member

Running Python Scripts & Required Modules

I've been using PAD for a few weeks now and am really liking it.  I've started to automate some things at work and have been using Python successfully until I started using scripts to query API's.  I first have to import requests, which gives me an error saying no module exists for requests.  When I point the Python script step to the path for the modules, I continue to get the same error.  I found the parent folder for requests is in site-packages, so I pointed it there, but it continues to complain about not having other modules.  I then created a new folder, copied the Python modules here and also put those from site-packages in the root here so everything is under the same directory.  However, this creates errors such as this:

 

File "C:\Users\Administrator\Documents\Modules\logging\__init__.py", line 1477
def exception(self, msg, *args, exc_info=True, **kwargs):
^
SyntaxError: unexpected token 'exc_info'

 

Not sure what to do here.  Has anyone else experienced this with Python modules and PAD?

7 REPLIES 7
burque505
Helper V
Helper V

Might I ask if you have imported 'sys'? If not, try the code below and change the path to the folder where the Python modules now are.

 

 

import sys
sys.path.append(r"c:\Python27\Lib")

 

 

Thank you for the reply.  I added these 3 lines to the top of the script:

 

import sys
sys.path.append(r"C:\Users\Administrator\AppData\Local\Programs\Python\Python39\Lib")
sys.path.append(r"C:\Users\Administrator\AppData\Local\Programs\Python\Python39\Lib\site-packages")

 

However, I'm getting the same error from my original post 😞

burque505
Helper V
Helper V

If I'm not mistaken you'll need to install Python 2.7 somewhere and use those modules, not Python 3.*. My recommendation would be to install it to C:\Python27, and don't add it to your path. You may want to search for running different Python versions on the same machine. You can look at Install-Python-2-and-3-on-same-Computer , for instance. User hpenvy's post describes what I'm suggesting:

 

Download the 2.7.7 installer package.
Install it and, this time, do NOT accept the defaults. Specifically, remove the “Register Extensions” option from installing.

 

 

You may see some other options - if you do, just make sure the installer DOES NOT update your Windows PATH environment variable. It might be a good idea to back that variable up just in case.

Now you'll have a Python 2.7 installation that won't interfere with your 3.9, if it's done right. All you need this for is the path to the Python 2.7 modules.

I didn't necessarily need python 3.9 on this dev VM, so I removed it.  I installed Python 2.7 using the method listed.  I then adjusted the import sys paths to this:

 

sys.path.append(r"C:\Python27\Lib")
sys.path.append(r"C:\Python27\Lib\site-packages")

 

I get a new error, but I suspect it's similar to the original issue:

 

Traceback (most recent call last):
File "<string>", line 16, in <module>
File "C:\Python27\Lib\site-packages\requests\api.py", line 61, in request
File "C:\Python27\Lib\site-packages\requests\sessions.py", line 528, in request
File "C:\Python27\Lib\site-packages\requests\sessions.py", line 456, in prepare_request
File "C:\Python27\Lib\site-packages\requests\models.py", line 382, in prepare_url
File "C:\Python27\Lib\site-packages\urllib3\packages\six.py", line 951, in ensure_str
File "C:\Python27\Lib\site-packages\requests\models.py", line 316, in prepare
File "C:\Python27\Lib\site-packages\urllib3\util\url.py", line 381, in parse_url
File "C:\Python27\Lib\site-packages\urllib3\util\url.py", line 296, in _normalize_host
TypeError: not expecting type '<type 'bytes'>'

burque505
Helper V
Helper V

I suspect you're close to solving it.

Are you free to post the Python code that throws the error? Does it work in Python 3?

Without seeing any code this is only a guess, but for Python 2, you may be able to avoid the error by using

 

 

response.content

 

 

or maybe

 

 

response.raw

 

 

instead of

 

 

response.text

 

 

The error looks to me like the script is receiving an array of bytes instead of an expected string.

This SO post may help.

 

Also, remember the Python 2 requirement to prepend 'u' to Unicode strings. Here's some codegrepper.com code  to illustrate that:

 

>>> r = requests.get('https://api.github.com/user', auth=('user', 'pass'))
>>> r.status_code
200
>>> r.headers['content-type']
'application/json; charset=utf8'
>>> r.encoding
'utf-8'
>>> r.text
u'{"type":"User"...'
>>> r.json()
{u'private_gists': 419, u'total_private_repos': 77, ...}

You can also try (from your Python 2.7 installation)

python -m pip install future

 

 

mavsuperman
New Member

I removed some of the data, but here's the majority of it:

 

 

import sys
sys.path.append(r"C:\Python27\Lib")
sys.path.append(r"C:\Python27\Lib\site-packages")
import requests
import json

url = "removed"

headers = {
  'Accept': 'application/json',
  'Content-Type': 'application/json',
  'Authorization': 'removed',
  'Cookie': 'removed'
}

response = requests.request("GET", url, headers=headers)
#data = response.text
#parsed = json.loads(data)

data = json.loads(response.text)
for d in data:
  print(d['profile']['manager'])

 

 

I got most of this code from Postman when getting the API query to work.

 

Thank you for your help!

burque505
Helper V
Helper V

The code will have to run in Python 2.7 before you can run it in PAD, of course.  In the code you posted, at the very least this statement should fail, as it's Python 3* syntax:

 

 

print(d['profile']['manager'])

 

 

But you could try putting this at the top of your script to see if it helps (and assuming either you've already installed 'future' via pip or that the 'future' module is supplied with your Python 2.7 installation, which is certainly possible and even likely):

 

from __future__ import print_function

 

 

Also, your error message shows a failure at line 16, which is probably this one:

 

 

response = requests.request("GET", url, headers=headers)

 

 

Regardless of whether I'm right or wrong about the above, you should try modifying your Python script directly from your Python 2.7 installation until you get it to work. If it doesn't work in PAD after that, then there's some inconsistency with IronPython.

 

Helpful resources

Announcements
Microsoft 365 Conference – December 6-8, 2022

Microsoft 365 Conference – December 6-8, 2022

Join us in Las Vegas to experience community, incredible learning opportunities, and connections that will help grow skills, know-how, and more.

Top Kudoed Authors
Users online (3,394)