У меня есть собственный пакет на Python, и я использую его очень часто. какой самый элегантный или стандартный каталог, в который я должен поместить свой пакет, чтобы его можно было импортировать, не играя с PYTHONPATH или sys.path?
А как насчет сайтов-пакетов например?
/usr/lib/python2.7/site-packages
.
Часто ли в Python копировать и вставлять пакет туда?
python
python-2.7
Кобри
источник
источник
~/foo/bar/
, добавьтеexport PYTHONPATH=~/foo/bar # fields separated by ":"
в свой~/.bashrc
файл). Видите лиman python
, этот ручной путь предшествует пути поиска python по умолчанию. Осторожно с коллизиями имен.Ответы:
Я обычно помещаю то, что хочу импортировать, в каталог сайта пользователя:
Чтобы показать правильный каталог для вашей платформы, вы можете использовать
python -m site --user-site
изменить: он появится, как
sys.path
только вы его создадите:mkdir -p "`python -m site --user-site`"
источник
python -m site --user-site
сообщит вам, какой каталог вам следует создать. Он не появится,sys.modules
пока вы его не создадите.mkdir
на,mkdir -p
чтобы создать промежуточные каталоги. У меня даже не было~/.local
. ;-)Так что, если вы такой же новичок, как я, и ваши каталоги не очень хорошо организованы, вы можете попробовать этот метод.
Откройте свой терминал Python. Импортируйте модуль, который, как вы знаете, работает, например, numpy, в моем случае, и выполните следующие действия.
Import numpy
numpy.__file__
что приводит к
'/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site- packages/numpy/__init__.py'
Результатом
numpy.__file__
является место, в которое вы должны поместить файл python с вашим модулем (за исключениемnumpy/__init__.py
), поэтому для меня это было бы/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site- packages
Для этого просто зайдите в свой терминал и введите
mv "location of your module" "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site- packages"
Теперь вы можете импортировать свой модуль.
источник
re.__file__
меня команда сработала.Это то, что у меня работает (мне часто приходится создавать пакеты python, которые загружаются в частный репозиторий pip). уточняя комментарий @joran к вопросу.
python setup.py sdist --format=tar
. созданный пакет в идеале должен находиться вdist
папке.pip install <yourpackage>.tar
вы можете использовать,
pip install --force-reinstall
если вам нужно больше поиграть с библиотеками и пересоздать пакеты dist.Я обнаружил, что этот метод мне очень подходит. Если вам не нужно упаковывать модули для использования в других системах, а не только в вашей локальной системе, этот метод может оказаться излишним.
Удачного взлома.
источник
На моем Mac я сделал
sudo find / -name "site-packages"
. Это дало мне несколько путей , как/Library/Python/2.6/site-packages
,/Library/Python/2.7/site-packages
и/opt/X11/lib/python2.6/site-packages
.Итак, я знал, где разместить свои модули, если я использовал v2.7 или v2.6.
Надеюсь, это поможет.
источник
Папки импорта можно извлечь, добавив следующий исходный код:
import sys print sys.path
Пример автоматической генерации символической ссылки:
ln -s \`pip show em | grep "Location"| cut -d " " -f2\` \`python -m site --user-site\`
вместо em вы можете использовать другой пакет, который вы «только что установили, но питон не видит его»
ниже я объясню более подробно, как это требуется в комментарии.
Предположим, вы установили модуль python em или pyserial с помощью следующей команды (примеры для ubuntu):
и результат такой:
Collecting pyserial Downloading pyserial-3.3-py2.py3-none-any.whl (189kB) 100% |████████████████████████████████| 194kB 2.3MB/s Installing collected packages: pyserial Successfully installed pyserial-3.3
вопрос будет следующим - python не видит модуль pyserial, почему? потому что место, где был установлен модуль, не является тем местом, которое python ищет для вашей конкретной учетной записи.
решение - мы должны создать символическую ссылку с пути, по которому pyserial прибыл, на путь, который ищет ваш python.
Команда создания символической ссылки будет такой:
вместо того, чтобы вводить точное местоположение, мы просим pip сообщить нам, где он хранит модули, выполнив команду:
pip show pyserial | grep "Location"| cut -d " " -f2
вместо того, чтобы вводить точное местоположение, мы просим python сообщить нам, где он ищет устанавливаемые модули, выполнив команду:
обе команды должны быть экранированы с помощью символа "` "(обычно слева от кнопки 1 для клавиатур США)
в результате для ln будет предоставлена следующая команда и будет создана отсутствующая символическая ссылка:
ln -s /usr/local/lib/python2.7/dist-packages /home/<your_username>/.local/lib/python2.7/site-packages
или что-то подобное, в зависимости от вашего дистрибутива и значений по умолчанию для python / pip.
источник
Если вы разрабатываете модуль, я бы рекомендовал следовать этому.
import sys sys.path.append("/home/mylinux/python-packages")
Теперь любой модуль, который вы используете,
python-packages
можно импортироватьPython-interpreter
.источник