如何从文件导入python代码?

时间:2011-12-23 04:22:37

标签: python import multifile

我对这个问题犹豫不决,因为我看到了类似的问题和过于复杂的答案。我真正想要回答的问题因“模糊”和“不是真正的问题”而被关闭,所以我将尽可能具体。

我在名为“line.py”的文件中有一个名为“line”的对象。我想创建另一个继承自“line”的对象,称为“line_segment”,并将其放在同一目录中名为“line_segment.py”的文件中。

path_finding_lib/
   line.py
   line_segment.py
   a_star.py

问题是我似乎找不到从“line_segment.py”里面“line.py”中使用代码的方法,而没有将字符串附加到系统PATH变量和类似的东西。

有没有办法从这样的文件路径导入?如果没有,为什么不呢?

3 个答案:

答案 0 :(得分:3)

虽然您可以使用以下命令附加到特定文件的python路径:

import sys
sys.path.append('pathtoModule')

如果它们位于同一个文件夹中(不是模块,因为缺少 init .py),您只需通过执行以下操作从线路模块导入:

from line import Line
class LineSegment(line):

命名约定为模块提供下划线和小写,Capitalized for Classes: http://www.python.org/dev/peps/pep-0008/

它是非标准的,如果动态附加到项目中的python路径,可能会导致麻烦,因为它会导致对象比较中的错误。

如果您有一个声明如下的对象:

path_finding_lib/
   line.py
   line_segment.py
   a_star.py
   somemodule/
       afile.py

如果您的线路模块使用路径somemodule.afile.SomeObject

从afile导入并实例化对象

与在afile中实例化对象的类不同:

afile.SomeObject.

如果afile返回一个afile.SomeObject的实例,并且将该对象与somemodule.afile.SomeObject的实例进行相等性比较,则会发现它们不相等。 即

somemodule.afile.SomeObject == afile.SomeObject
==> False

答案 1 :(得分:1)

在其他文件中使用python代码的最简单方法是使用import语句。

说你什么时候

import xyz 

Python将尝试查找文件xyz.py.它调查了

  1. site-packages文件夹(python安装目录中的文件夹,包含预装的模块,比如说django等)
  2. PYTHONPATH环境变量(或python中的sys.path)中提到的位置
  3. 您当前的目录
  4. 在您的情况下,您的程序应该有以下行

    from line import line
    

    第一行是你的line.py文件,第二行是你的类 无论您想使用行对象进行继承,只需使用

    即可
    class newline(line):
    

    问题是如何运行程序。如果你从path_finding_lib中运行它(即当你的工作目录是path_finding_lib并且你做了

    python line_segment.py
    

    ,它应该可以工作(您也可以选择在同一个文件夹中创建一个空文件 init .py。)

    如果从您的主目录

    运行它
    ~$ python /path_to/path_finding_lib line_segment.py
    

    它不起作用。这是因为python将搜索site-packages,PYTHONPATH和你当前的目录而不是line.py.为了能够从任何地方运行它,在运行之前将line.py的位置添加到PYTHONPATH

    $export PYTHONPATH=/path_to/path_finding_lib
    

    然后你应该能够运行它

    注意:我假设你有一个linux系统。对于Windows,遗憾的是我不知道修改PYTHONPATH的过程

答案 2 :(得分:0)

由于它们位于同一目录中,因此请创建一个名为__init__.py的空文件。这允许Python将您正在使用的目录作为包处理,并且您将能够从这些其他文件中提取对象和方法。