我对这个问题犹豫不决,因为我看到了类似的问题和过于复杂的答案。我真正想要回答的问题因“模糊”和“不是真正的问题”而被关闭,所以我将尽可能具体。
我在名为“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变量和类似的东西。
有没有办法从这样的文件路径导入?如果没有,为什么不呢?
答案 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.SomeObject.
如果afile返回一个afile.SomeObject的实例,并且将该对象与somemodule.afile.SomeObject的实例进行相等性比较,则会发现它们不相等。 即
somemodule.afile.SomeObject == afile.SomeObject
==> False
答案 1 :(得分:1)
在其他文件中使用python代码的最简单方法是使用import语句。
说你什么时候
import xyz
Python将尝试查找文件xyz.py.它调查了
在您的情况下,您的程序应该有以下行
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将您正在使用的目录作为包处理,并且您将能够从这些其他文件中提取对象和方法。