When deployed via github-actions deploy.yaml
steps:
- name: Checkout
uses: actions/checkout@v4
- name: 'Azure Login'
uses: azure/login@v2
with:
client-id: ${{ env.ARM_CLIENT_ID }}
subscription-id: ${{ env.ARM_SUBSCRIPTION_ID }}
tenant-id: ${{ env.ARM_TENANT_ID }}
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.9.20'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: 'Download Azure Function publishing profile'
env:
AZURE_SUBSCRIPTION_ID: ${{ env.ARM_SUBSCRIPTION_ID }}
FUNCTION_APP_RESOURCE_GROUP: ${{ env.ARM_RESOURCE_GROUP_NAME }}
FUNCTION_APP_NAME: fa-${{ env.APP_NAME }}
run: |
echo "FUNCTION_APP_PUB_PROFILE=$(az functionapp deployment list-publishing-profiles --subscription $AZURE_SUBSCRIPTION_ID --resource-group $FUNCTION_APP_RESOURCE_GROUP --name $FUNCTION_APP_NAME --xml)" >> $GITHUB_ENV
- name: "Deploy function"
uses: Azure/functions-action@v1
with:
app-name: fa-${{ env.APP_NAME }}
publish-profile: ${{ env.FUNCTION_APP_PUB_PROFILE }}
package: '.'
my python function function_app.py
import azure.functions as func
import logging
app = func.FunctionApp()
@app.timer_trigger(schedule="0 */1 * * * *", arg_name="myTimer", run_on_startup=True,
use_monitor=False)
def zsdbi(myTimer: func.TimerRequest) -> None:
try:
logging.info('36 Python timer trigger function executed.')
import zsbiconfig
import sftplib
# import triggerfunc
if myTimer.past_due:
logging.info('The timer is past due!')
config = zsbiconfig.MyConfig(azure=True)
print('config.ftp_host:', config.ftp_host)
print('config.ftp_username:', config.ftp_username)
print('config.ftp_password:', config.ftp_password)
# err = triggerfunc.triggerfunc(config)
except Exception as e:
logging.exception(e)
return
does not find any package installed from requirements.txt
azure-functions
matplotlib
numpy
sftplib
pandas
python-dateutil
azure-identity
azure-keyvault-secrets
Office365-REST-Python-Client
The error message is :
2025-01-21T12:26:00Z [Error] No module named 'sftplib'
Traceback (most recent call last):
File "/home/site/wwwroot/function_app.py", line 13, in zsdbi
import sftplib
ModuleNotFoundError: No module named 'sftplib'
But the log of pip install ... performed on azure with the above deploy.yaml says :
Run python -m pip install --upgrade pip
Requirement already satisfied: pip in /home/runner/_work/_tool/Python/3.9.20/x64/lib/python3.9/site-packages (24.3.1)
Requirement already satisfied: azure-functions in /home/runner/_work/_tool/Python/3.9.20/x64/lib/python3.9/site-packages (from -r requirements.txt (line 5)) (1.21.3)
Requirement already satisfied: matplotlib in /home/runner/_work/_tool/Python/3.9.20/x64/lib/python3.9/site-packages (from -r requirements.txt (line 6)) (3.9.4)
Requirement already satisfied: numpy in /home/runner/_work/_tool/Python/3.9.20/x64/lib/python3.9/site-packages (from -r requirements.txt (line 7)) (2.0.2)
Requirement already satisfied: sftplib in /home/runner/_work/_tool/Python/3.9.20/x64/lib/python3.9/site-packages (from -r requirements.txt (line 8)) (0.0.2)
Note 1
When I install the dependencies in .python_packages/lib/site-packageswith :
- name: Install dependencies
run: |
pushd './${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}'
python -m pip install --upgrade pip
pip install -r requirements.txt --target=".python_packages/lib/site-packages"
It works, but as all packages are now included in the zip file deployed to azure. The deploy takes n (minutes) longer which is somewhat annoying

- name: Create and start virtual environment run: | python -m venv venv source venv/bin/activate - name: Install dependencies run: pip install -r requirements.txt.