日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python多包运行_如何组织包含多个包的python项目,以便包中的每个文件仍然可以单独运行?...

發布時間:2025/5/22 python 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python多包运行_如何组织包含多个包的python项目,以便包中的每个文件仍然可以单独运行?... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

TL;DR

如果您能讓它看起來像第二個項目組織圖,并且仍然可以運行以下命令,那么您已經回答了問題:$ git clone https://github.com/Poddster/package_problems.git

$ cd package_problems

$ nosetests

$ ./my_tool/my_tool.py

$ ./my_tool/t.py

$ ./my_tool/d.py

(or for the above commands, $ cd ./my_tool/ && ./my_tool.py is also acceptable)

或者:給我一個不同的項目結構,允許我將相關文件(“包”)組合在一起,單獨運行所有文件,將文件導入到同一包中的其他文件中,并將包/文件導入到其他包的文件中。

現狀

我有一堆python文件。當可以從命令行調用時,它們中的大多數都很有用,即它們都使用argparse和if __name__ == "__main__"來執行有用的操作。

目前我有這個目錄結構,一切正常:.

├── config.txt

├── docs/

│?? ├── ...

├── my_tool.py

├── a.py

├── b.py

├── c.py

├── d.py

├── e.py

├── README.md

├── tests

│?? ├── __init__.py

│?? ├── a.py

│ ? ├── b.py

│?? ├── c.py

│?? ├── d.py

│?? └── e.py

└── resources

├── ...

一些腳本import其他腳本中的內容來完成它們的工作。但是沒有一個腳本僅僅是一個庫,它們都是可調用的。e、 g.我可以調用./my_tool.py、./a.by、./b.py、./c.py等,它們會為用戶做一些有用的事情。

“my_tool.py”是利用所有其他腳本的主腳本。

我想發生的事

不過,我想改變項目的組織方式。這個項目本身代表了一個用戶可以使用的完整程序,并將作為一個整體進行分發,但是我知道它的一部分稍后將在不同的項目中有用,所以我想嘗試將當前文件封裝到一個包中。在不久的將來,我還將向這個項目添加其他包。

為了促進這一點,我決定將項目重新組織為如下內容:.

├── config.txt

├── docs/

│?? ├── ...

├── my_tool

│?? ├── __init__.py

│?? ├── my_tool.py

│?? ├── a.py

│?? ├── b.py

│?? ├── c.py

│?? ├── d.py

│?? ├── e.py

│?? └── tests

│?? ├── __init__.py

│?? ├── a.py

│?? ? ├── b.py

│?? ├── c.py

│?? ├── d.py

│?? └── e.py

├── package2

│?? ├── __init__.py

│?? ├── my_second_package.py

| ├── ...

├── README.md

└── resources

├── ...

但是,我無法找出滿足以下標準的項目組織:所有腳本都可以在命令行上調用(可以是my_tool\a.py或cd my_tool && a.py)

實際運行的測試:)

package2中的文件可以執行import my_tool

主要問題是包和測試使用的import語句。

目前,所有的包,包括測試,只需做import ,它就被正確地解析了。但是當擺弄周圍的東西時就不起作用了。

請注意,支持py2.7是一項要求,因此所有文件的頂部都有from __future__ import absolute_import, ...。

我所做的一切,以及災難性的后果

1個

如果我如上所示移動文件,但保留所有導入語句的當前狀態:$ ./my_tool/*.py工作正常,運行正常

$ nosetests從頂層目錄運行不起作用。測試無法導入包腳本。

pycharm在編輯這些文件時以紅色突出顯示導入語句:

2個

如果我將測試腳本更改為:from my_tool import x$ ./my_tool/*.py仍然可以工作,并且它們都正常運行

$ nosetests從頂層目錄運行不起作用。然后測試可以導入正確的腳本,但是當測試腳本導入腳本時,腳本中的導入本身會失敗。

pycharm仍然在主腳本中以紅色突出顯示導入語句:(

3個

如果我保持相同的結構,并將所有更改為from my_tool import,那么:$ ./my_tool/*.py導致ImportErrors

$ nosetests運行一切正常。

pycharm什么都不抱怨

例1:Traceback (most recent call last):

File "./my_tool/a.py", line 34, in

from my_tool import b

ImportError: cannot import name b

4個

我也嘗試過from . import x,但最終ValueError: Attempted relative import in non-package直接運行腳本。

看看其他的答案:

我不能用python -m pkg.tests.core_test作為

a)我沒有main.py。我想我可以吃一個嗎?

b) 我想能夠運行所有的腳本,而不僅僅是main?

我試過:if __name__ == '__main__' and __package__ is None:

from os import sys, path

sys.path.append(path.dirname(path.dirname(path.abspath(__file__))))

但沒用。

我也試過:__package__ = "my_tool"

from . import b

但收到:SystemError: Parent module 'loading_tool' not loaded, cannot perform relative import

在from . import b之前添加import my_tool最后返回ImportError: cannot import name b

修理?

什么是正確的魔法咒語和目錄布局,使所有這些工作?

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的python多包运行_如何组织包含多个包的python项目,以便包中的每个文件仍然可以单独运行?...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。