вызвать python скрипт функции из другого каталога - PullRequest
0 голосов
/ 13 марта 2020

Попытка вызова функции сценария python из некоторого другого каталога. Ниже приведен упрощенный пример: -

~/playground/octagon/bucket/pythonImport/eg $

pwd
/Users/mogli/playground/octagon/bucket/pythonImport/eg

~/playground/octagon/bucket/pythonImport/eg $

ls
foo.py

~/playground/octagon/bucket/pythonImport/eg $

cat foo.py
import sys

def hello():
    print('Hello :)')

def hii():
    print('Hii :)')

~/playground/octagon/bucket/pythonImport/eg $

python -c 'from foo import *; hii()'
Hii :)

~/playground/octagon/bucket/pythonImport/eg $

cd ..

~/playground/octagon/bucket/pythonImport $

ls
eg

~/playground/octagon/bucket/pythonImport $

python -c 'from eg/foo import *; hii()'
  File "<string>", line 1
    from eg/foo import *; hii()
           ^
SyntaxError: invalid syntax

~/playground/octagon/bucket/pythonImport $

python -c 'from eg.foo import *; hii()'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: No module named eg.foo

~/playground/octagon/bucket/pythonImport $

python -c 'from eg.foo.py import *; hii()'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: No module named eg.foo.py

Если каталог выполнения является тем же каталогом, где находится сценарий python, то ниже работает без проблем: -

python - c 'от foo import *; hii () '

Но если сценарий python находится в дочернем каталоге, то следующие попытки не сработали: -

python - c' например, / foo import *; hii () '

python - c' из eg.foo import *; hii () '

python - c' из eg.foo.py import *; hii () '

python версия на машине - 2.7.16

Ответы [ 4 ]

3 голосов
/ 28 марта 2020

Проблема в том, что python на самом деле не распознает ваш код как package, вы можете узнать больше об этом здесь

Исправление для этого будет:

создать __init__.py для каждого directory и subdirectory

Предполагая, что дерево каталогов выглядит так:

eg/
   __init__.py
   foo.py

Теперь вы go в том же каталоге, где находится папка eg, выполните команду:

python -c "from gd.foo import *; hii()"

Вывод:

output


Надеюсь, это поможет вам решить вашу проблему.

0 голосов
/ 28 марта 2020

работает ... pyCall. sh

#!/bin/bash
python -c "import sys;sys.path.append('./eg');import foo as foo1;foo1.hii()"

Выполнить

sudo chmod + x ./pyCall.sh
./pyCall. sh

Убедитесь, что у вас есть файл foo, например, в этом каталоге. Работал ли он?

0 голосов
/ 28 марта 2020

Вы пробовали python -c 'from ./eg/foo import *; hii()'? Может быть, все, что вам нужно, это ./ в начале.

0 голосов
/ 22 марта 2020

Это сработало для меня ->

python -c "from eg import foo as foo1;foo1.hi()"
Inside Eg Foo
python -c "import foo as foo;foo.hi()"
Inside First FOO

Однако, если вы используете это внутри скриптов, вам нужно добавить свой основной путь в переменные пути, используя следующую команду.

import sys
sys.path.append("Your main path")
...