簡體   English   中英

如何從文件導入python代碼?

[英]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. 它調查

  1. site-packages文件夾(這是python安裝目錄中的文件夾,其中包含預裝的模塊,比如說django等)
  2. PYTHONPATH環境變量中提到的位置(或python中的sys.path)
  3. 您當前的目錄

在您的情況下,您的程序應該具有以下行

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM