Python:导入文件夹的符号链接

Eci*_*ana 11 python import symlink

我有一个文件夹A,其中包含一些Python文件和__init__.py.

如果我将整个文件夹A复制到其他文件夹B并在那里创建一个带有"import A"的文件,它就可以了.但现在我删除文件夹并移动到原始文件夹的符号链接.现在它不起作用,说"没有名为foo的模块".有谁知道如何使用符号链接进行导入?

Don*_*ion 10

Python不会检查您的文件是否是符号链接!您的问题可能在于重命名模块或在搜索路径中没有它们!

如果ModuleA变为ModuleB并且您尝试导入ModuleA,则无法找到它,因为它不存在.

如果将ModuleA移动到另一个目录中并生成带有另一个名称(表示新目录)的符号链接,则此新目录必须是脚本和模块的公共父目录,或者symlink目录必须位于搜索路径中.

顺便说一句,目前尚不清楚你是指模块还是包装.包含该__init__.py文件的目录成为所有文件的包,其中包含扩展名.py(= modules).

DIRA
  + __init__.py    <-- makes DIRA to package DIRA
  + moduleA.py     <-- module DIRA.moduleA
Run Code Online (Sandbox Code Playgroud)

移动和符号链接

/otherplace/DIRA  <-+
                    |  points to DIRA
mylibraries/SYMA  --+  symbolic link
Run Code Online (Sandbox Code Playgroud)

如果SYMA与DIRA具有相同的名称,并且您的脚本位于SYMA目录中,那么它应该可以正常工作.如果没有,那么你必须:

import sys
sys.path.append('/path/to/your/package/root')
Run Code Online (Sandbox Code Playgroud)

如果要从SYMA包中导入模块,您必须:

import SYMA.ModuleA
Run Code Online (Sandbox Code Playgroud)

一个简单的:

import SYMA
Run Code Online (Sandbox Code Playgroud)

将包名称,而不是包中的模块导入您的命名空间!


小智 6

如果您的符号链接设置不正确,就会发生这种行为。例如,如果您使用相对文件路径创建它们。在这种情况下,符号链接的创建不会出错,但不会指向任何有意义的地方。

如果这可能是导致错误的原因,请使用完整路径创建链接,并通过ls链接和观察预期的目录内容来检查它们是否正确。