Python: импортиране на символна връзка на папка

Имам папка A, която съдържа някои Python файлове и __init__.py.

Ако копирам цялата папка A в друга папка B и създам там файл с „import A“, работи. Но сега премахвам папката и премествам символична връзка към оригиналната папка. Сега не работи, казвайки „Няма модул с име foo“. Някой знае ли как да използвам символна връзка за импортиране?


person Ecir Hana    schedule 05.01.2012    source източник


Отговори (2)


Python не проверява дали вашият файл е символна връзка или не! Вашият проблем вероятно се крие в преименуването на модулите или липсата им в пътя ви за търсене!

Ако ModuleA стане ModuleB и се опитате да импортирате ModuleA, той не може да го намери, защото не съществува.

Ако сте преместили ModuleA в друга директория и генерирате символна връзка с друго име, което представлява нова директория, тази нова директория трябва да бъде общата родителска директория на вашия скрипт и вашия модул или директорията на символната връзка трябва да е в пътя за търсене.

BTW не е ясно дали имаш предвид модул или пакет. Директорията, съдържаща файла __init__.py, се превръща в пакет от всички файлове с разширение .py (= модули), намиращи се там.

Пример

DIRA
  + __init__.py    <-- makes DIRA to package DIRA
  + moduleA.py     <-- module DIRA.moduleA

Преместване и символна връзка

/otherplace/DIRA  <-+
                    |  points to DIRA
mylibraries/SYMA  --+  symbolic link

Ако SYMA има същото име като DIRA и вашият скрипт е в директорията SYMA, тогава трябва да работи добре. Ако не, тогава трябва да:

import sys
sys.path.append('/path/to/your/package/root')

Ако искате да импортирате модул от вашия пакет SYMA, трябва:

import SYMA.ModuleA

Едно просто:

import SYMA

ще импортира името на пакета, но не и модулите в пакета във вашето пространство от имена!

person Don Question    schedule 05.01.2012
comment
Мисля, че този отговор може да се прилага само когато се изпълнява python под Windows. Изглежда, че на моя Mac, python ДА проверява дали файлът е символна връзка. (stackoverflow.com/a/38403654/2155605) - person Ogen; 25.05.2018

Този тип поведение може да се случи, ако вашите символни връзки не са настроени правилно. Например, ако сте ги създали с помощта на относителни файлови пътища. В този случай символните връзки ще бъдат създадени без грешка, но няма да сочат никъде смислено.

Ако това може да е причината за грешката, използвайте пълния път, за да създадете връзките и проверете дали са правилни, като lsвключите връзката и наблюдавате очакваното съдържание на директорията.

person CJ Ryan    schedule 06.12.2016