簡體   English   中英

無法在Python 2.7中導入自己的軟件包

[英]Can't import own packages in Python 2.7

我在將自己的程序包導入程序時遇到了一些麻煩,因此我創建了一個測試文件夾以嘗試了解我在做什么錯。

這是最簡單的事情,但我仍然無法正常工作。

這是我的文件夾結構:

test
> pack1
  > __init__.py
  > mod1.py
> pack2
  > __init__.py
  > mod2.py

兩個init文件都為空。

mod1看起來像這樣:

def foo():
    print "hello"

mod2看起來像這樣

from pack1.mod1 import *

foo()

在PyCharm中運行代碼時,一切正常! 但是當嘗試從cmd執行時,我得到ImportError: No module named pack1.mod1

sys.path.insert(0, "../pack1")我唯一的選擇,還是cmd無法配合使用的另一個原因?

無論版本如何,python都必須知道在哪里尋找軟件包。 操縱sys.path是一個快速而骯臟的選擇,如果您的代碼變得更加復雜,將來會有時中斷。 嘗試制作一個軟件包並通過pip install -epython setup.py develop pip install -e

(在漂亮的distutils簡介中查找此內容)

在常規Python中,只有某些文件夾會被檢查以導入軟件包,而您擁有的test文件夾似乎不是這些文件之一。 要更改此設置,請在mod2.py編輯sys.path然后導入pack1.mod1

mod2.py

import sys
# Add test folder to sys.path
sys.path.append("../")

from pack1.mod1 import *
# Prints "hello"!
foo()

另外,除了編輯sys.path ,您還可以將pack1文件夾添加到Python目錄中的Lib文件夾中。 這將起作用,因為默認情況下,這是sys.path中的文件夾之一。

Python 2.7
  > Lib
    > pack1
      > __init__.py
      > mod1.py

mod2.py

from pack1.mod1 import *
# Prints "hello"!
foo()

您說您通過以下方式執行它: (Documents)/test/pack2> python mod2.py

問題是pack2.mod2.py不知道pack1在哪里。

作為模塊執行:( (Documents)/test> python -m pack2.mod2

如果您不想修改腳本或目錄布局,則可以使用PYTHONPATH環境變量。

vagrant@h:/tmp/test/pack2$ python mod2.py
Traceback (most recent call last):
  File "mod2.py", line 1, in <module>
    from pack1.mod1 import *
ImportError: No module named pack1.mod1
vagrant@h:/tmp/test/pack2$ export PYTHONPATH="${PYTHONPATH}:/tmp/test"
vagrant@h:/tmp/test/pack2$ python mod2.py
hello
vagrant@h:/tmp/test/pack2$

有關搜索模塊的更多信息-https: //docs.python.org/2/tutorial/modules.html#the-module-search-path

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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