Добавление пути к файлу в sys.path в python

У меня был файл example_file.py Я хочу использовать это example_file.py из разных файлов, поэтому я решил добавить example_file.py в sys.path и импортирование этого файла в другой файл для использования функциональных возможностей файла. Я открыл ipython и сделал следующее

import sys
sys.path
sys.path.append('/path/to/the/example_file.py')

И когда я попытался импортировать этот файл из другого пути каталога, как

import example_file

он работает нормально, но после того, как я вышел из ipython, я снова вошел в него и проверил sys.path, здесь путь, который я добавил, отсутствует, поэтому кто-нибудь может сообщить мне, как добавить путь к sys.path постоянно в python

4 ответа

Решение

Есть несколько способов. Одним из самых простых является создание my-paths.pth файл (как описано здесь). Это просто файл с расширением .pth что вы положили в свою систему site-packages каталог. В каждой строке файла вы помещаете одно имя каталога, поэтому вы можете вставить туда строку с /path/to/the/ и он добавит этот каталог к ​​пути.

Вы также можете использовать переменную окружения PYTHONPATH, которая похожа на системную переменную PATH, но содержит каталоги, которые будут добавлены в sys.path, Смотрите документацию.

Обратите внимание, что независимо от того, что вы делаете, sys.path содержит каталоги, а не файлы. Вы не можете "добавить файл в sys.pathMsgstr "Вы всегда добавляете его каталог, а затем можете импортировать файл.

Этот способ сработал для меня:

добавив путь, который вам нравится:

export PYTHONPATH=$PYTHONPATH:/path/you/want/to/add

проверка: вы можете запустить cmd 'export' и проверить вывод, или вы можете проверить его с помощью этого cmd:

python -c "import sys; print(sys.path)"

Другой способ приблизиться к этому — установить файл как отдельный модуль.

Создайте файл установщика, как показано ниже (с именем pysetup.py):

      import setuptools

module_name = input("Enter module name: ")
setuptools.setup(
    name=module_name,
    py_modules=[module_name],
)

Затем вы можете установить этот установщик, используя себя с помощью python pysetup.py installЗатем при появлении запроса введите pysetup.

Теперь, чтобы установить любой файл, вы можете ввести python -m pysetup installзатем введите имя файла. Вы также можете заменить installс developустановить в режиме разработки и продолжить редактирование файла.

В одном из дистрибутивов windows в следующем файле: <python_root_installation_directory>/python38._pth

есть следующие строки:

      python38.zip
.
./lib
./lib/site-packages

# Uncomment to run site.main() automatically
#import site

Таким образом, с этим контентом получаются следующие результаты:

      Python 3.8.2 (tags/v3.8.2:7b3ab59, Feb 25 2020, 23:03:10) [MSC v.1916 64 bit (AMD64)] on win32
>>> import sys
>>> sys.path
['C:\\Program Files\\Applications\\python_3_8_2\\python38.zip', 'C:\\Program Files\\Applications\\python_3_8_2', 'C:\\Program Files\\Applications\\python_3_8_2\\./lib', 'C:\\Program Files\\Applications\\python_3_8_2\\./lib/site-packages']

Итак, после добавления этой строки в файл: ./lib/site-packages/win32ctypes он присутствует в пути:

      Python 3.8.2 (tags/v3.8.2:7b3ab59, Feb 25 2020, 23:03:10) [MSC v.1916 64 bit (AMD64)] on win32
>>> import sys
>>> sys.path
['C:\\Program Files\\Applications\\python_3_8_2\\python38.zip', 'C:\\Program Files\\Applications\\python_3_8_2', 'C:\\Program Files\\Applications\\python_3_8_2\\./lib', 'C:\\Program Files\\Applications\\python_3_8_2\\./lib/site-packages', 'C:\\Program Files\\Applications\\python_3_8_2\\./lib/site-packages/win32ctypes']

Таким образом, вам не нужно, чтобы переменная присутствовала в системе, и вы все равно можете иметь эту функциональность. Недостатком будет то, что это зависит от конкретной установки, поэтому, если у вас есть 3 разных дистрибутива в вашей системе, это повлияет только на выбранную установку, в то время как PYTHONPATH повлияет на них всех одновременно.

Другие вопросы по тегам