Узнать директорию python linux

How to get the PYTHONPATH in shell?

sys.path is not PYTHONPATH , sys.path actually consists of multiple things : current dir,PYTHONPATH,standard library, and paths contained in .pth files if any. docs.python.org/2/tutorial/modules.html#the-module-search-path

6 Answers 6

The environment variable PYTHONPATH is actually only added to the list of locations Python searches for modules. You can print out the full list in the terminal like this:

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

Or if want the output in the UNIX directory list style (separated by : ) you can do this:

python -c "import sys; print(':'.join(x for x in sys.path if x))" 

Which will output something like this:

/usr/local/lib/python2.7/dist-packages/feedparser-5.1.3-py2.7.egg:/usr/local/lib/ python2.7/dist-packages/stripogram-1.5-py2.7.egg:/home/qiime/lib:/home/debian:/us r/lib/python2.7:/usr/lib/python2.7/plat-linux2:/usr/lib/python2.7/lib-tk:/usr/lib /python2.7/lib-old:/usr/lib/python2.7/lib- dynload:/usr/local/lib/python2.7/dist- packages:/usr/lib/python2.7/dist-packages:/usr/lib/python2.7/dist-packages/PIL:/u sr/lib/python2.7/dist-packages/gst-0.10:/usr/lib/python2.7/dist-packages/gtk-2.0: /usr/lib/pymodules/python2.7

@variable No, the paths in PYTHONPATH is added to the paths in sys.path when the Python interpreter starts. In other words, sys.path will include all the paths in PYTHONPATH , but also additional paths, like the path to the Python standard library and the path to installed packages.

This gives me syntax error (pointing to end of import word — EOL while scanning string literal): python -c ‘import os; print(os.environ[«PYTHONPATH»])’. If I use double quote then it says «name ‘PYTHONPATH’ is not defined»

Just write:

just write which python in your terminal and you will see the python path you are using.

That’s the path to the python executable NOT the PYTHONPATH. PYTHONPATH is where python itself looks for modules to import.

Those of us using Python 3.x should do this:

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

Python, at startup, loads a bunch of values into sys.path (which is «implemented» via a list of strings), including:

  • various hardcoded places
  • the value of $PYTHONPATH
  • probably some stuff from startup files (I’m not sure if Python has rcfiles )
Читайте также:  Linux compressing file system

$PYTHONPATH is only one part of the eventual value of sys.path .

If you’re after the value of sys.path , the best way would be to ask Python (thanks @Codemonkey):

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

Python 2.x:
python -c «import sys; print ‘\n’.join(sys.path)»

Python 3.x:
python3 -c «import sys; print(‘\n’.join(sys.path))»

The output will be more readable and clean, like so:

/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python27.zip /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7 /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload /Library/Python/2.7/site-packages /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/PyObjC

Источник

Текущая директория в Python

Как в Python — программе узнать путь до текущей директории со скриптом. Я знаю, что для этого требуется библиотека os, но там столько различных классов и функций, что можно пол дня убить на поиски.

5 ответов 5

Если вы запускаете скрипт C:\Scripts\script.py из D:\work папки:

D:\work> py C:\Scripts\script.py 
  • D:\work — это текущая рабочая директория на момент старта скрипта. open(‘file.txt’) будет пытаться открыть D:\work\file.txt файл
  • C:\Scripts — это директория со скриптом.

Текущая рабочая директория

Текущая рабочая директория возвращается os.getcwd() функцией, где CWD это Current Working Directory («текущая рабочая директория»). os.getcwdb() возвращает путь в виде байт. Происхождение функции от POSIX getcwd(3) . Другие способы могут вернуть разные результаты в зависимости от настроек доступа промежуточных директорий, общей длины (от платформы зависит) итд—не изобретайте своих способов, если не осознаёте всех последствий возможного изменения в поведении функции. Также нетрадиционные способы получения рабочей директории могут ухудшить читаемость другими Питон-программистами. Из The Zen of Python :

There should be one— and preferably only one —obvious way to do it.

По умолчанию относительные пути используют именно эту директорию, поэтому явно вызывать os.getcwd() редко нужно. Например, open(‘file.txt’) вызов открывает файл ‘file.txt’ в текущей директории. Если необходимо передать полный путь в виде строки, то можно использовать os.path.abspath(‘file.txt’) — getcwd() снова явно не используется.

Читайте также:  Create nfs share linux

Path.cwd() из pathlib модуля возвращает путь к текущей директории как объект c разными полезными и удобными методами такими как .glob(‘**/*.py’) .

Директория со скриптом

Текущая рабочая директория может отличаться от директории с текущим Питон-скриптом. Часто, но не всегда можно os.path.dirname(os.path.abspath(__file__)) использовать, чтобы получить директорию с текущим Питон скриптом, но это не всегда работает. Посмотрите на get_script_dir() функцию, которая поддерживает более общий случай.

Если хочется получить данные из файла, расположенного относительно установленного Питон-модуля, то используйте pkgutil.get_data() или setuptools’ pkg_resources.resource_string() вместо построения путей c помощью __file__ . Это работает даже, если ваш пакет упакован в архив. В Python 3.7 появился importlib.resources модуль. К примеру, если у вас есть Питон пакет data внутри которого лежит файл.txt , то чтобы достать текст:

import importlib.resources text = importlib.resources.read_text('data', 'файл.txt') 

Если вы хотите найти место куда пользовательские данные можно положить, то appdirs модуль предоставляет переносимый способ:

import appdirs # $ pip install appdirs user_data_dir = appdirs.user_data_dir("Название приложения", "Кто создал") 

Разные платформы (Windows, MacOS, Linux) используют разные соглашения, appdirs позволяет не плодить сущностей и использовать на каждой платформе подходящие директории.

Источник

Find full path of the Python interpreter?

How do I find the full path of the currently running Python interpreter from within the currently executing Python script?

3 Answers 3

sys.executable contains full path of the currently running Python interpreter.

import sys print(sys.executable) 

This does not seem to work from scripts with a shebang /usr/bin/env python executed as env -i ./script . In that case it returns the current working directory.

@JohnFreeman: I tried this on a GNU/Linux box w/ GNU coreutils 8.4 (env) and Python 3.4.2. #!/usr/bin/env python3 will return the correct full binary path via sys.executable . Perhaps your OS or Python version behaves slightly differently.

Читайте также:  Интерфейс прикладного программирования linux

Note that this will not return the name of the Python interpreter if Python is embedded in some application.

I tried this with the shebang for python2 and python3 and it printed the correct executable. I also tried with no shebang and called the script with the python and python3 commands and it printed the correct executable.

@mic_e, this may have been true in 2015, but I just tried it today and it behaves as expected (it returns the absolute file of the executable that embeds Python).

Just noting a different way of questionable usefulness, using os.environ :

import os python_executable_path = os.environ['_'] 
$ python -c "import os; print(os.environ['_'])" /usr/bin/python 

There are a few alternate ways to figure out the currently used python in Linux is:

Similarly On Windows with Cygwin will also result the same.

kuvivek@HOSTNAME ~ $ which python /usr/bin/python kuvivek@HOSTNAME ~ $ whereis python python: /usr/bin/python /usr/bin/python3.4 /usr/lib/python2.7 /usr/lib/python3.4 /usr/include/python2.7 /usr/include/python3.4m /usr/share/man/man1/python.1.gz kuvivek@HOSTNAME ~ $ which python3 /usr/bin/python3 kuvivek@HOSTNAME ~ $ command -v python /usr/bin/python kuvivek@HOSTNAME ~ $ type python python is hashed (/usr/bin/python) 

If you are already in the python shell. Try anyone of these. Note: This is an alternate way. Not the best pythonic way.

>>> import os >>> os.popen('which python').read() '/usr/bin/python\n' >>> >>> os.popen('type python').read() 'python is /usr/bin/python\n' >>> >>> os.popen('command -v python').read() '/usr/bin/python\n' >>> >>> 

If you are not sure of the actual path of the python command and is available in your system, Use the following command.

pi@osboxes:~ $ which python /usr/bin/python pi@osboxes:~ $ readlink -f $(which python) /usr/bin/python2.7 pi@osboxes:~ $ pi@osboxes:~ $ which python3 /usr/bin/python3 pi@osboxes:~ $ pi@osboxes:~ $ readlink -f $(which python3) /usr/bin/python3.7 pi@osboxes:~ $ 

Источник

Оцените статью
Adblock
detector