python не может найти пакеты в экземпляре ec2

#python #amazon-web-services #amazon-ec2 #package

#python #amazon-web-services #amazon-ec2 #пакет

Вопрос:

Я пытаюсь запустить python-скрипт на экземпляре aws ec2 с помощью jenkins.

Я получаю следующую ошибку:

 [ProdTest] $ /bin/sh -xe /tmp/jenkins14047325752732522807.sh
  python3 prod.py
Traceback (most recent call last):
  File "prod.py", line 2, in <module>
    import base
  File "/home/jenkins-slave-strat/workspace/ProdTest/base.py", line 3, in <module>
    import boto3
ModuleNotFoundError: No module named 'boto3'
Build step 'Execute shell' marked build as failure
Finished: FAILURE
 

в экземпляре ec2:

 $ python3 --version
Python 3.7.9

$ pip3 install boto3 --user
WARNING: pip is being invoked by an old script wrapper. This will fail in a future version of pip.
Please see https://github.com/pypa/pip/issues/5599 for advice on fixing the underlying issue.
To avoid this problem you can invoke Python with '-m pip' instead of running pip directly.
Requirement already satisfied: boto3 in /usr/local/lib/python3.7/site-packages (1.16.25)
Requirement already satisfied: jmespath<1.0.0,>=0.7.1 in /usr/local/lib/python3.7/site-packages (from boto3) (0.10.0)
Requirement already satisfied: s3transfer<0.4.0,>=0.3.0 in /usr/local/lib/python3.7/site-packages (from boto3) (0.3.3)
Requirement already satisfied: botocore<1.20.0,>=1.19.25 in /usr/local/lib/python3.7/site-packages (from boto3) (1.19.25)
Requirement already satisfied: urllib3<1.27,>=1.25.4; python_version != "3.4" in /usr/local/lib/python3.7/site-packages (from botocore<1.20.0,>=1.19.25->boto3) (1.26.2)
Requirement already satisfied: python-dateutil<3.0.0,>=2.1 in /usr/local/lib/python3.7/site-packages (from botocore<1.20.0,>=1.19.25->boto3) (2.8.1)
Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.7/site-packages (from python-dateutil<3.0.0,>=2.1->botocore<1.20.0,>=1.19.25->boto3) (1.15.0)
 

Как мне заставить python получить доступ к пакетам в /usr/local/lib/python3.7/site-packages ?

Спасибо всем, кто нашел время!

Ответ №1:

Прежде чем я дам краткий ответ, несколько предостережений:

  1. Я не знаю, в какой версии Linux (я полагаю) запущен экземпляр EC2.
  2. В результате неясно, установлен ли Python 2, но поскольку вы использовали pip3, а не только pip, похоже, что это может быть.

Вы можете попробовать изменить свою переменную $PATH, но обычно считается хорошей практикой использовать виртуальные среды для Python. Я лично поклонник Conda, но вы также можете найти руководства для Pipenv. Мой совет: установите Conda через Miniconda, затем выполните следующие действия:

 $ conda create --name myAppEnv python=your.python.version
$ conda activate myAppEnv
$ conda install [your libraries]
 

Комментарии:

1. как ни странно, пакет сайта включен в ПУТЬ. Я даже получил несколько, казалось бы, противоречащих утверждений при установке пакетов (в этом примере numpy): ПРЕДУПРЕЖДЕНИЕ: скрипты f2py, f2py3 и f2py3.7 устанавливаются в ‘/ usr / local / bin’, которого нет в PATH. Однако при проверке пути, который он выдает: $ echo $PATH /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/ sbin:/home/ ec2-user/.local/bin:/home/ ec2-user/bin В любом случае, вашрешение работает и выглядит как лучшая практика, чем все, что я делал на данный момент: D спасибо!

2. Да. Если вы не специалист по обработке данных, вы можете заглянуть в Pipenv, но в принципе любой разработчик Python, даже на одноцелевой виртуальной машине, должен использовать виртуальные среды. Это просто причуда того, как язык фрагментировался.