繁体   English   中英

Python:从另一个位置导入文件

[英]Python: Importing file from another location

我不确定我哪里出错了,我已经尝试了其他问题中列出的一堆方法,所以如果我遗漏了什么,我会重新提问。

我有以下结构:

|-bin/
  -file.py
|-unittests/
  -__init__.py
  |-test_bin/
    -__init__.py
    -test_file.py

我在test_file.py尝试了以下内容但无济于事:

1) Import Error: No module named bin.file

from bin.file import *

2) Import Error: No module named bin.file

import sys
from os import path
sys.path.append(path.dirname(path.dirname(path.abspath(__file__))))
from bin.file import *

3) ValueError: Attempted relative import in non-package

from ...bin.file import *

我使用的命令是python test_file.py

要使导入工作,您需要位于项目的根目录。

但是,您可以在包的根目录添加一个 setup.py 文件,这将允许您从任何地方导入您的函数(见下文):

设置.py:

from setuptools import setup

setup(
    name='test',
    version='0.1',
    packages=['bin']
)

然后在项目的根目录下运行以下 shell 命令:

python setup.py develop

在此处输入图片说明

通过这些步骤,您应该能够根据需要导入文件。

请注意, test.eff-info 文件夹是自动创建的。

我希望它有帮助

Python 导入有点奇怪。 首先,要解决您的问题 - 在您的 bin 目录中添加一个名为__init__.py的空文件。 现在解释为什么——

Python 建立了一个搜索路径。 它使用环境变量 PYTHONPATH 中的所有目录,以及用于 virtualenv 或基本解释器的site-packages 一般运行python也会把当前工作目录添加到PYTHONPATH中。

因此,可以导入这些目录之一中的任何.py文件。 但是对于模块,它不会查看每个目录。 相反,它只计算包含那个神奇的__init__.py文件的目录。 所以你会在那里看到bin.py .. 但不是bin/bin.py ,直到你添加__init__.py文件。

(这适用于一直向下的嵌套目录)。

看看你的问题,这可能仍然是一个问题——如果你从 test_file 所在的底部目录运行你的命令,你的根目录不在搜索路径上,无论如何都可以看到bin 所以你必须做PYTHONPATH=../..:$PYTHONPATH python test_file.py或者从根python unittests/test_bin/test_file.py运行命令

test_file.py的开头添加以下代码它将获取当前文件的当前目录,然后找到作为unittests的子目录,最后它将到达父目录bin

另外,最好将 file => file.py的名称更改为另一个名称以避免冲突。

试试下面的代码,让我知道。

import os,sys,inspect
current_dir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))
unittests_dir = os.path.dirname(current_dir)
bin_dir = os.path.dirname(unittests_dir)
sys.path.insert(0, bin_dir)

import file 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM