2015-06-25 2 views
1

Я пытаюсь выполнить сборку пакера.Почему я не могу запустить команду «source» из сборки пакера?

Мой источник AMI - это поле Ubuntu. Я хотел бы установить и запустить виртуальную среду python.

Мое устройство для обеспечения показано ниже. Apt-get работает отлично, и он создает virtualenv. Однако, когда я активирую источник, он терпит неудачу. Я получаю следующую ошибку: /tmp/script.sh: 53: /tmp/script.sh

Кажется, я не могу запустить source в моей сборщике пакера. Как мне обойти эту проблему? Мне нужно запустить virtualenv и сделать pip install изнутри.

"provisioners": [ 

    { 
     "type": "shell", 
     "inline": [ 
     "echo '70'", 
     "sudo apt-get --assume-yes install python-virtualenv", 
     "echo '80'", 
     "sudo virtualenv /home/myuser/myVirtualEnv", 
     "echo '90'", 
     "ls -altr /home/myuser/myVirtualEnv/bin", 
     "echo '95'", 
     "source /home/myuser/myVirtualEnv/bin/activate", 
     "echo '100'", 
     ] 
    } 
    ] 

Вот консольный вывод:

myHostName: 70 
    myHostName: Reading package lists... Done 
    myHostName: Building dependency tree 
    myHostName: Reading state information... Done 
    myHostName: The following NEW packages will be installed: 
    myHostName: python-virtualenv 
    myHostName: 0 upgraded, 1 newly installed, 0 to remove and 125 not upgraded. 
    myHostName: Need to get 1,485 kB of archives. 
    myHostName: After this operation, 1,935 kB of additional disk space will be used. 
    myHostName: Get:1 http://us-east-1.ec2.archive.ubuntu.com/ubuntu/ trusty/universe python-virtualenv all 1.11.4-1 [1,485 kB] 
    myHostName: Fetched 1,485 kB in 0s (22.5 MB/s) 
    myHostName: Selecting previously unselected package python-virtualenv. 
    myHostName: (Reading database ... 56592 files and directories currently installed.) 
    myHostName: Preparing to unpack .../python-virtualenv_1.11.4-1_all.deb ... 
    myHostName: Unpacking python-virtualenv (1.11.4-1) ... 
    myHostName: Processing triggers for man-db (2.6.7.1-1ubuntu1) ... 
    myHostName: Setting up python-virtualenv (1.11.4-1) ... 
    myHostName: 80 
    myHostName: New python executable in /home/myuser/myVirtualEnv/bin/python 
    myHostName: Installing setuptools, pip...done. 
    myHostName: 90 
    myHostName: total 3312 
    myHostName: lrwxrwxrwx 1 root root  6 Jun 25 17:21 python2.7 -> python 
    myHostName: lrwxrwxrwx 1 root root  6 Jun 25 17:21 python2 -> python 
    myHostName: -rwxr-xr-x 1 root root 3345416 Jun 25 17:21 python 
    myHostName: -rwxr-xr-x 1 root root  254 Jun 25 17:21 easy_install-2.7 
    myHostName: -rwxr-xr-x 1 root root  254 Jun 25 17:21 easy_install 
    myHostName: -rwxr-xr-x 1 root root  226 Jun 25 17:21 pip2.7 
    myHostName: -rwxr-xr-x 1 root root  226 Jun 25 17:21 pip2 
    myHostName: -rwxr-xr-x 1 root root  226 Jun 25 17:21 pip 
    myHostName: drwxr-xr-x 6 root root 4096 Jun 25 17:21 .. 
    myHostName: -rw-r--r-- 1 root root 1129 Jun 25 17:21 activate_this.py 
    myHostName: -rw-r--r-- 1 root root 2476 Jun 25 17:21 activate.fish 
    myHostName: -rw-r--r-- 1 root root 1263 Jun 25 17:21 activate.csh 
    myHostName: -rw-r--r-- 1 root root 2207 Jun 25 17:21 activate 
    myHostName: drwxr-xr-x 2 root root 4096 Jun 25 17:21 . 
    myHostName: 95 
    myHostName: /tmp/script.sh: 53: /tmp/script.sh: source: not found 
    myHostName: 100 

ответ

2

Вы можете только источник внутри оболочки, что вы не имеете. И в любом случае есть более простое решение, прямо используйте двоичные файлы, предоставленные для вас в virtualenv.

$ virtualenv foobarbaz 
$ foobarbaz/bin/python -c 'import sys; print sys.prefix;' 

иллюстрирует понятие & будет работать точно так же, с ПУМ.

+0

Спасибо. Какую команду я должен выполнить, чтобы сделать эту работу с пипом вместо необработанного кода python, который вы показали? –

+0

Pip? Он находится в том же месте. И показано на вашем собственном выходе. – deets

+0

Получил это. Благодарю. :) –

1

Обратите внимание на комментарий о сценариях оболочки в разделе «Устранение неполадок» here. По умолчанию упаковщик использует/bin/sh, который на Ubuntu является командной оболочкой. Оболочка dash не поддерживает команду «source». Вместо этого вы могли бы:

  • Использовать "." вместо источника
  • Укажите inline_shebang в вашем пакера файле
  • использовать «сценарий» вместо «инлайн»
Смежные вопросы