Импорт модулей Python из другого рабочего каталога

Вы можете сделать это, просто используя функцию дублирования pandas drop

df.drop_duplicates(['A','B'],keep= 'last')
30
задан DavidM 25 June 2009 в 23:03
поделиться

6 ответов

На самом деле ваш пример работает, потому что check.py находится в том же каталоге, что и agent.py, но скажем, check.py находился в предыдущем каталоге, например;

agent/agent.py
checks.py

Тогда вы можете сделать следующее :

path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))
if not path in sys.path:
    sys.path.insert(1, path)
del path

Обратите внимание на использование __ file __ .

30
ответ дан 27 November 2019 в 23:48
поделиться

You need to add the path to the currently executing module to the sys.path variable. Since you called it on the command line, the path to the script will always be in sys.argv[0].

import sys
import os
sys.path.append(os.path.split(sys.argv[0])[0])

Now when import searches for the module, it will also look in the folder that hosts the agent.py file.

7
ответ дан 27 November 2019 в 23:48
поделиться

Есть несколько способов добавить элементы в PYTHONPATH .

Прочтите http://docs.python.org/library/site.html

  1. Задайте переменную среды PYTHONPATH перед запуском сценария.

    Вы можете сделать это python -m agent , чтобы запустить agent.py из вашего PYTHONPATH .

  2. Создайте файлы .pth в каталоге lib / site-packages .

  3. Установите свои модули в lib / site-packages .

5
ответ дан 27 November 2019 в 23:48
поделиться

НЕ нужно возиться с sys.path. Цитата из документации Python 2.6 для sys.path:

При инициализации при запуске программы первый элемент этого списка, путь [0] - это каталог, содержащий сценарий, который использовался для вызвать интерпретатор Python. Если каталог сценария не доступен (например, если интерпретатор вызывается интерактивно или если сценарий читается из стандартного ввода), путь [0] - пустая строка, который направляет Python на поиск модулей в первую очередь в текущем каталоге. Обратите внимание, что каталог сценария вставлен перед записями вставлен в результате PYTHONPATH.

=== amod.py ===
def whoami():
    return __file__

=== ascript.py ===
import sys
print "sys.argv", sys.argv
print "sys.path", sys.path
import amod
print "amod __file__", amod.whoami()

=== result of running ascript.py from afar ===
C:\somewhere_else>\python26\python \junk\timport\ascript.py
sys.argv ['\\junk\\timport\\ascript.py']
sys.path ['C:\\junk\\timport', 'C:\\WINDOWS\\system32\\python26.zip', SNIP]
amod __file__ C:\junk\timport\amod.py

, и если он будет запущен повторно, последняя строка, конечно, изменится на ... amod.pyc. Кажется, это не новинка, это работает с Python 2.1 и 1.5.2.

Подсказки для вас: попробуйте два простых файла, как у меня. Попробуйте запустить Python с -v и -vv. Покажите нам результаты ваших неудачных тестов, включая полную трассировку и сообщение об ошибке, а также ваши два файла. Сообщите нам, на какой платформе вы работаете и какой версии Python. Проверьте права доступа к файлу check.py. Есть ли Checks.something_else, вызывающий помехи?

12
ответ дан 27 November 2019 в 23:48
поделиться

Я думаю, вам следует подумать о том, чтобы сделать каталог агента правильным пакетом Python. Затем вы размещаете этот пакет в любом месте пути Python и можете импортировать проверки как

from agent import checks

См. http://docs.python.org/tutorial/modules.html

1
ответ дан 27 November 2019 в 23:48
поделиться

Если вы знаете полный путь к check.py, используйте этот рецепт ( http://code.activestate.com/recipes/159571/ )

Если вы хотите добавить каталог в системный путь - этот рецепт ( http://code.activestate.com/recipes/52662/ ). В этом случае мне нужно определить каталог приложения (sys.argv [0]) и передать это значение функции AddSysPath. Если вы хотите посмотреть производственный образец, оставьте комментарий в этой теме, и я отправлю его позже.

С уважением.

1
ответ дан 27 November 2019 в 23:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: