首页 > 解决方案 > 从另一个 .py 文件导入变量

问题描述

我正在学习 python 编程,我陷入了一些可能非常基本但我无法修复的问题。我的问题是:我在一个目录中有一个名为“Downloading_The_Data”的 .py 文件。该文件包含一些变量,如“HOUSING_PATH”等。现在,我在同一目录中有另一个 .py 文件,我想将另一个文件导入其中。我只写了“import DOWNLOADING_THE_DATA”,一切正常,除非我尝试使用似乎未导入的变量“HOUSING_PATH”。编码:

“DOWNLOADING_THE_DATA”文件:

import os
import tarfile
import urllib

DOWNLOAD_ROOT = "https://raw.githubusercontent.com/ageron/handson-ml/master/"
HOUSING_PATH = os.path.join("datasets" , "housing")
HOUSING_URL = DOWNLOAD_ROOT + "datasets/housing/housing.tgz"

def fetch_housing_data(housing_url=HOUSING_URL, housing_path=HOUSING_PATH):
    if not os.path.isdir(housing_path):
        os.makedirs(housing_path)
    tgz_path = os.path.join(housing_path, "housing.tgz")
    urllib.request.urlretrieve(housing_url, tgz_path)
    housing_tgz = tarfile.open(tgz_path)
    housing_tgz.extractall(path=housing_path)
    housing_tgz.close()

新的python文件是:

import pandas as pd
import Downloading_The_Data

def load_housing_data(housing_path=HOUSING_PATH):
    csv_path = os.path.join(housing_path , "housing.csv")
    return pd.read_csv(csv_path)

错误是: NameError: name 'HOUSING_PATH' is not defined

我以为我可以只导入“DOWNLOADING_THE_DATA”文件,并且在那里声明的所有变量都将被导入,这样我就可以使用它了。因此,我的问题很简单直接:出了什么问题,我该如何解决?

编辑:只是一个免责声明:我知道我可以在一个文件中使用所有内容,只需调用 pandas 和所有内容并将 csv 加载到同一个笔记本中,但这是我为自己做的练习。我知道有一天我需要导入其他文件及其变量和内容,所以我只是从一开始就尝试这样做。

标签: python-3.xpython-importnameerror

解决方案


您应该使用来自另一个 python 文件的任何定义,如下所示:

import module
module.variable = 5
module.class()
module.function()

或者你可以这样做:

from module import variable, class, function
variable = 5
class()
function()

from module import *不是好习惯。如果你讨厌打字,你可以给另一个名字:

from module import variable as var
var = 5

推荐阅读