如何从Python文件夹外部访问模块?

Sea*_*ais 18 python

如何从其他文件夹访问模块?

这是文件结构:

/<appname>
    /config
        __init__.py
        config.py
    /test
        test.py # I'm here
Run Code Online (Sandbox Code Playgroud)

我想从test.py中访问config.py中的函数.我该怎么做?
这是我的导入:

import config.config
Run Code Online (Sandbox Code Playgroud)

当我运行test.py脚本时,它总会说:

ImportError: No module named config.config
Run Code Online (Sandbox Code Playgroud)

我做错什么了吗?

aru*_*nte 20

最简单的方法是修改sys.path变量(它定义导入搜索路径):

# Bring your packages onto the path
import sys, os
sys.path.append(os.path.abspath(os.path.join('..', 'config')))

# Now do your import
from config.config import *
Run Code Online (Sandbox Code Playgroud)

  • 嗯,不完全是。这是在`join`块内。所以你会做`join('..','..','config')` (4认同)
  • 这里的“..”是什么,请解释 (2认同)
  • 处理相对路径时,它是“向上一个目录”的标准路径语义。 (2认同)
  • 可以使用 `os.path.pardir` 代替 `'..'` 。所以它变成: `sys.path.append(os.path.abspath(os.path.join(os.path.pardir, 'config')))` (2认同)

fal*_*tru 9

将 app 目录添加到模块搜索路径。

例如:

PYTHONPATH=/path/to/appname python test.py
Run Code Online (Sandbox Code Playgroud)

  • 你是一个传奇! (4认同)

Hri*_*nov 9

Yo只能导入您的环境可见的模块.您可以使用此检查环境.

import sys
print sys.path
Run Code Online (Sandbox Code Playgroud)

正如您将看到的,sys.path是一个列表,因此您可以向其追加元素:

sys.path.append('/path_to_app/config')
Run Code Online (Sandbox Code Playgroud)

你应该能够导入你的模块.

顺便说一句:关于这一点有很多问题.