2010-06-08 3 views
1

У меня есть приложение python, которое я разрабатываю. Необходимо использовать другую библиотеку, которая находится в другом каталоге.Использование нескольких проектов python

расположение файла выглядит следующим образом: реж X имеет два проекта:

каталоги
  • текущего проекта
  • xLibrary

Я хотел бы использовать xLibrary в currentProject. Я пытался код Writting, как если бы все источники проживали в том же каталоге и называя мои проекты основной сценарий с:

PYTHONPATH=.:../xLibrary ./current-project.py 

, но это не работает. Я хотел бы использовать его базу кода без установки библиотеки globaly или копирования ее в каталог моего проекта. Является ли это возможным? Или, если нет, как мне решить эту проблему.

ответ

2

Как правило, хорошая практика программирования заключается в том, чтобы изолировать пакеты в реальных пакетах и ​​рассматривать их как таковые. Если вы уверены, что вы хотите продолжать с этим подходом, хотя вы можете изменить путь поиска внутри питона через:

import sys 
sys.path.append("<path_containing_the_other_python_files>") 

Чтобы избежать вложений абсолютных путей, вы можете использовать os.path.abspath(__file__), чтобы получить абсолютный путь к в настоящее время осуществляет .py файл и следовать с несколькими os.path.dirname() вызовов построить правильный относительный путь для включения в sys.path

слегка измененный подход, который позволил бы вам получить лучшее из обоих миров было бы добавить __init__.py файл xLibrary, затем добавьте путь, содержащий 'xLibrary', к sys.path i nstead. Последующий код Python мог бы затем импортировать все «правильно» через from xLibrary import my_module, а не только import my_module, что может смутить людей, привыкших к стандартным макетам каталога.

+0

этот приятный :) Я сделал именно это. –

0
bash$ ln -s ../xLibrary xLibrary 
+0

Кажется простой, но на самом деле нет :) Я хотел бы, чтобы это весьма общий характер, и независимая платформа: D –

0

Во-первых, вероятно, лучше использовать абсолютные пути в переменной PYTHONPATH. Во-вторых, я не думаю, что вам нужно добавить текущий каталог в путь.

Кроме этого, было бы хорошо знать, что это такое, что не работает и что такое сообщение об ошибке. командной строки, у вас там, кажется, отсутствует точка с запятой Попробуйте эти два:

a=12 echo $a 
b=12 ;echo $b 

... и вы увидите разницу.

+0

На самом деле мне нужно "." в PyTHOnPath из-за некоторых особенностей python с обработкой UTF-8. –

+0

Хорошо, не знал об этом. :) –

0

Помимо других предложений, вы можете рассмотреть пакет virtualenv. После написания небольшого файла setup.py вы можете «фактически установить» библиотеку и вообще избегать всех настроек PYTHONPATH.

Это действительно хорошая практика и поощряется сообществом python.

В противном случае я предпочитаю использовать метод sys.path (по Ракису)

2

Это зависит от того, как вы используете xLibrary от current-project.

Если вы что-то вроде from xLibrary import module1 внутри current-project, то xLibrary потребности должны быть разложены как пакет Python:

xLibrary/ 
xLibrary/__init__.py 
xLibrary/module1.py # or whatever other modules the package consists of 

В этом случае, вы должны включить xLibrary «s родительский каталог в PYTHONPATH:

PYTHONPATH=.:.. ./current-project.py 

Однако, если xLibrary - это всего лишь коллекция модулей Python, которые вы импортируете отдельно (то есть, если вы делаете import module1 и import module2 в current-project с xLibrary, содержащий файлы module1.py и module2.py), вы должны включить xLibrary в PYTHONPATH так же, как вы делали:

PYTHONPATH=.:../xLibrary ./current-project.py 
+0

спасибо Par - довольно проницательный! –

Смежные вопросы