Including 3rd party libraries¶
It’s a Very Bad Idea ™ to install (or ask users to install) 3rd-party libraries in the OS X system Python. Alfred-Workflow makes it easy to include them in your Workflow.
Simply create a lib subdirectory under your Workflow’s root directory and install your dependencies there. You can call the directory whatever you want, but in the following explanation, I’ll assume you used lib.
To install libraries in your dependencies directory, use:
pip install --target=path/to/my/workflow/lib python-lib-name
The path you pass as the --target argument should be the path to the directory under your Workflow’s root directory in which you want to install your libraries. python-lib-name should be the “pip name” (i.e. the name the library has on PyPI) of the library you want to install, e.g. requests or feedparser.
This name is usually, but not always, the same as the name you use with import.
For example, to install Alfred-Workflow, you would run pip install Alfred-Workflow but use import workflow to import it.
An example: You’re in a shell in Terminal.app in the Workflow’s root directory and you’re using lib as the directory for your Python libraries. You want to install requests. You would run:
pip install --target=lib requests
This will install the requests library into the lib subdirectory of the current working directory.
Then you instantiate Workflow with the libraries argument:
1 2 3 4 5 6 7 8 | from workflow import Workflow
def main(wf):
import requests # Imported from ./lib
if __name__ == '__main__':
wf = Workflow(libraries=['./lib'])
sys.exit(wf.run(main))
|
When using this feature you do not need to create an __init__.py file in the lib subdirectory. Workflow(…, libraries=['./lib']) and creating ./lib/__init__.py are effectively equal alternatives.
Instead of using Workflow(…, libraries=['./lib']), you can add an empty __init__.py file to your lib subdirectory and import the libraries installed therein using:
from lib import requests
instead of simply:
import requests