![](/img/trans.png)
[英]In python, what code should I generate to do "from FILE import *"?
[英]How do I import python code from a file?
我對這個問題猶豫不決,因為我看到類似的問題,答案過於復雜。 我真正想要回答的問題因“模糊”和“不是真正的問題”而被關閉,所以我將盡可能具體。
我在名為“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變量和類似的東西。
有沒有辦法從這樣的文件路徑導入? 如果沒有,為什么不呢?
雖然您可以使用以下命令附加到特定文件的python路徑:
import sys
sys.path.append('pathtoModule')
如果它們位於同一文件夾中(不是模塊,因為缺少init .py),您可以通過執行以下操作從行模塊導入:
from line import Line
class LineSegment(line):
命名約定為模塊提供下划線和小寫,適用於類: 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
在其他文件中使用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的過程
由於它們位於同一目錄中,因此請創建一個名為__init__.py
的空文件。 這允許Python將您正在使用的目錄作為包處理,並且您將能夠從這些其他文件中提取對象和方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.